如果您创建一个可变长度数组并使用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.

以上是如果您创建一个可变长度数组并使用g++编译会发生什么的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>