【问题标题】:the Intel C/C++ compilers throw error during array initialization英特尔 C/C++ 编译器在数组初始化期间抛出错误
【发布时间】:2016-09-16 03:06:07
【问题描述】:

我有常规的 C++ 代码,用于将数组初始化为一个可以使用 Cygwin 上最新的 gnu 编译器正常编译的值:

int main(){
    x = 10;
    int my_array[x][x][x] = {0};
    double my_other_array[x][x][x][x] = {0.};
    return 0;
}

但是,当我将它转移到集群并执行 intel 编译器(以及用于 mic 协处理器的所有花哨的东西)时,代码将无法编译,并且它失败并出现以下错误:

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

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

但是,我的数组的外壳函数(在实际代码中,不是我的示例)被调用,输入决定了数组的大小......所以,虽然数组大小在执行期间不会改变,但我可以'不仅仅是将数字放在数组框中(呃,括号) - 它们需要是变量。


如何使用英特尔编译器实现此功能?

【问题讨论】:

  • “数组框”是什么意思?你是说初始化列表,{}里面的东西吗?
  • 是的,声明中的括号区域:my_array [this part],但不是大括号
  • 试试x = 10; --> const int x = 10;
  • @BLUEPIXY 啊谢谢伙计...会试试...
  • @bordeo -- 如何使用 intel 编译器实现这个功能? -- 你真的想要吗? IMO,使用std::vector 远优于使用无效的 C++ 语法。首先,如果您开始使用std::vector,则无需在此处发布问题,因为该代码适用于任何 ANSI 标准 C++ 编译器。

标签: c++ c intel icc


【解决方案1】:

可变大小数组的使用是编译器扩展,不是标准 C++ 语言功能。 (这是 C 语言较新规范的标准功能。)英特尔编译器不支持此功能。

要声明可变大小的数组,您需要使用 std::vector 或类似的东西。

【讨论】:

  • 我认为 ICC 通常支持 GNU C++ 语言扩展。有没有办法开启?
  • 即使在 C 中,VLA 也不允许使用初始化程序
  • @PeterCordes 我花了一些时间,但我想我在英特尔文档中找到了一个参考,其中提到 VLA 包含在 Cilk Plus 功能中,这是英特尔语言扩展的一部分,在默认情况下。有一个论坛帖子暗示只有一个索引(第一个?)多维数组可以是可变的,但我还没有在文档中找到它说的地方。
猜你喜欢
  • 2014-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-10
  • 1970-01-01
相关资源
最近更新 更多