如果您创建一个可变长度数组并使用g++编译会发生什么
以下代码编译良好,因为 g++ 允许它,但它会导致未定义的行为吗?或者我的代码可以正常工作?如果在使用时没有产生错误,那么 C++ 标准不允许可变长度数组是什么意思?
#include <iostream>
using namespace std;
int main()
{
int x;
cin >> x;
char abc[x];
cout << sizeof(abc) << "n";
return 0;
}
回答
GCC在这里记录了它对 VLA 的支持(重点是我的)
ISO C99 中允许使用可变长度的自动数组,作为扩展,GCC在 C90 模式和 C++ 中接受它们。
CLANG文档也效仿,但明确提到该标准不接受(强调我的)
GCC 和 C99 允许在运行时确定数组的大小。标准 C++ 中不允许此扩展名。但是,为了与 GNU C 和 C99 程序兼容,Clang 支持此类可变长度数组。
如果你不想使用这个扩展,你可以随时禁用它
-Werror=vla以禁止编译。
- An extension to the above: `-pedantic` warns of use of ALL of GCC's non-Standard extensions.