英特尔C/C++;编译器在数组初始化期间抛出错误 我有一个正则的C++代码,用于数组初始化,用CygWin的最新GNU编译器编译:< /P> int main(){ x = 10; int my_array[x][x][x] = {0}; double my_other_array[x][x][x][x] = {0.}; return 0; }

英特尔C/C++;编译器在数组初始化期间抛出错误 我有一个正则的C++代码,用于数组初始化,用CygWin的最新GNU编译器编译:< /P> int main(){ x = 10; int my_array[x][x][x] = {0}; double my_other_array[x][x][x][x] = {0.}; return 0; },c++,c,intel,icc,C++,C,Intel,Icc,但是,当我将其转移到集群并使用英特尔编译器(使用所有用于mic协处理器的高级工具)时,代码将无法编译,并且会出现以下错误: 错误:变量“my_array”可能未初始化 当我将实际整数而不是变量放入数组框时,错误消息消失 然而,我的数组的外壳函数(在实际代码中,不是我的示例中)是通过确定数组大小的输入来调用的……因此,虽然数组大小在执行过程中没有变化,但我不能只将数字放在数组框(呃,括号)中——它们需要是变量 如何使用英特尔编译器实现此功能const int x=10@BLUEPIXY啊,谢谢你

但是,当我将其转移到集群并使用英特尔编译器(使用所有用于mic协处理器的高级工具)时,代码将无法编译,并且会出现以下错误:

错误:变量“my_array”可能未初始化

当我将实际整数而不是变量放入数组框时,错误消息消失

然而,我的数组的外壳函数(在实际代码中,不是我的示例中)是通过确定数组大小的输入来调用的……因此,虽然数组大小在执行过程中没有变化,但我不能只将数字放在数组框(呃,括号)中——它们需要是变量



如何使用英特尔编译器实现此功能
要声明可变大小的数组,您需要使用std::vector或类似的工具。

什么是“数组框”?你是指初始值设定项列表,
{}
中的内容吗?是的,声明中括号内的区域:
my_数组[这部分]
,但不是括号
x=10-->
const int x=10@BLUEPIXY啊,谢谢你…我会试试…@bordeo--我如何用英特尔编译器实现这一功能?--你真的想吗?IMO,使用<代码> STD::向量远远优于使用无效C++语法。首先,如果你开始使用<代码> STD::vector < /C>,你就不需要发表一个问题,因为代码将对任何ANSI标准的C++编译器工作。我认为ICC一般支持GNU C++语言扩展。没有办法启用它吗?即使在C中,也不允许使用初始值设定项VLAs@PeterCordes这花了我一段时间,但我想我在英特尔文档中找到了一个参考,它说VLA包含在Cilk Plus功能中,这是英特尔语言扩展的一部分,默认情况下是打开的。有一篇论坛帖子暗示多维数组只有一个索引(第一个?)是可变的,但我还没有在文档中找到它所说的地方。