在c ++中创建一个非常长的数组时会发生什么?

时间:2011-11-23 08:17:54

标签: c++ arrays

AFAIK此代码不是标准的有效c ++代码:

int a = 5;
int b[a];

但似乎许多编译器可以编译该代码(主要是警告),它只是按预期运行。我错了是编译器对我好吗?

3 个答案:

答案 0 :(得分:8)

它被称为可变长度数组(VLA),标准C ++,任何版本的C ++都不允许这样做,尽管有些GCC支持它作为扩展。

如果你正在使用GCC,那么

  • 使用-pedantic选项进行编译,您会看到警告。
  • 使用-pedantic -Werror选项进行编译,您会看到警告变为错误。

VLA仅允许通过C99,但不允许使用其他版本的C。

答案 1 :(得分:4)

编译器很好。 :)

它实际上是C标准的一部分,一些编译器(如GCC)使用此功能扩展了C ++。

答案 2 :(得分:2)

这是C99标准可变长度数组(或VLA),许多可编译C99的编译器通常允许其某些功能用于非标准符合C ++代码。

G ++是其中一个编译器,请参阅here