AFAIK此代码不是标准的有效c ++代码:
int a = 5;
int b[a];
但似乎许多编译器可以编译该代码(主要是警告),它只是按预期运行。我错了是编译器对我好吗?
答案 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。