3

记住以下代码:

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 扩展 VLA 页面上没有记录的扩展。我也找不到匹配的错误报告。任何人都可以验证这是否是扩展或是否存在现有错误报告?

4

1 回答 1

3

我怀疑这种新行为实际上可能与GCC 4.9 发行说明相关:

G++ 支持 C++1y 可变长度数组。G++ 长期以来一直支持 GNU/C99 风格的 VLA,但现在还支持初始化器和 lambda 引用捕获。在 C++1y 模式下,G++ 会抱怨标准草案不允许使用的 VLA 使用,例如形成指向 VLA 类型的指针或将 sizeof 应用于 VLA 变量。请注意,现在看来 VLA 将不再是 C++14 的一部分,而是将成为单独文档的一部分,然后可能是 C++17。

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

于 2014-10-27T23:44:04.790 回答