如果您创建一个可变长度数组并使用 g++ 编译会发生什么

spo*_*a__ 2 c++ g++

以下代码编译良好,因为 g++ 允许它,但它会导致未定义的行为吗?或者我的代码可以正常工作?如果在使用时没有产生错误,那么 C++ 标准不允许可变长度数组是什么意思?

#include <iostream>

using namespace std;

int main()
{
   int x;
   cin >> x;
   char abc[x];
   cout << sizeof(abc) << "\n";
   
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

Zos*_*oso 5

GCC在这里记录了它对 VLA 的支持(重点是我的

ISO C99 中允许使用可变长度的自动数组,作为扩展,GCC在 C90 模式和 C++ 中接受它们

CLANG文档也效仿,但明确提到该标准不接受(强调我的

GCC 和 C99 允许在运行时确定数组的大小。标准 C++ 中不允许此扩展名。但是,为了与 GNU C 和 C99 程序兼容,Clang 支持此类可变长度数组。

如果你不想使用这个扩展,你可以随时禁用它 -Werror=vla以禁止编译。

  • 上述内容的扩展:`-pedantic` 警告使用所有 GCC 的非标准扩展。 (2认同)