是否使用大括号GCC错误或扩展来初始化VLA?

时间:2014-10-27 23:29:22

标签: c++ c gcc variable-length-array

记住以下代码:

int main()
{
    int n = 3;
    int arr[n] = { 1, 2, 3 };
}

GCC在C99模式下正确地出错error: variable-sized object may not be initialized并且clang在C ++模式下给出了相同的错误。但是在C ++模式下,GCC并没有抱怨。这会让我相信它可能是他们C extensions VLA page未记录的延伸。我也找不到匹配的错误报告。任何人都可以验证这是扩展程序还是现有的错误报告?

1 个答案:

答案 0 :(得分:3)

这个新行为实际上是在中提到的,因为我怀疑它可能与GCC 4.9 release notes有关:

  

G ++支持C ++ 1y可变长度数组。 G ++支持   GNU / C99风格的VLA很长一段时间,但现在另外支持   初始化程序和lambda通过引用捕获。在C ++ 1y模式中,G ++会   抱怨草案标准不允许的VLA使用,   例如形成指向VLA类型的指针或将sizeof应用于VLA   变量。请注意,现在看来,VLA不会成为其中的一部分   C ++ 14,但它将成为单独文档的一部分,然后可能是C ++ 17。

请注意,此版本的C ++默认标准模式仍为gnu++98/gnu++03