琐碎的C ++代码......为什么要编译?

时间:2013-09-20 14:15:41

标签: c++ arrays

this这样的C ++教程说,必须在程序运行之前确定所有数组的大小。例如,这是不允许的:

cout << "How many variables do you want? ";
int nVars;
cin >> nVars;

int anArray[nVars]; // wrong!  The size of the array must be a constant

但是这个简单的程序 编译并执行正常。 应该吗?

4 个答案:

答案 0 :(得分:6)

这是C ++编译器实现的通用扩展,例如GNU的g ++。使用-std=c++0x标志进行编译,将此类声明视为错误。

答案 1 :(得分:4)

包括gccclang在内的多个编译器支持可变长度数组作为扩展,即使这实际上是 C99 功能。

如果在使用-pedanticgcc进行构建时使用clang参数,则会发出类似于以下内容的警告:

warning: variable length arrays are a C99 feature [-Wvla-extension]

答案 2 :(得分:2)

它不应该在标准C ++中,但是gcc / g ++和(我相信)MSVC都支持这种可变长度数组的扩展。您可以配置一些选项来禁用扩展,但在这种情况下代码无法编译。

如果使用-pedantic,则在g ++中将无法编译。

答案 3 :(得分:1)

现代C / C ++编译器允许使用变量来定义数组大小。结果与使用alloca()相同。 这不是现在的标准,但gcc这样做,关于另一个 - 需要检查。