cout << "How many variables do you want? ";
int nVars;
cin >> nVars;
int anArray[nVars]; // wrong! The size of the array must be a constant
但是这个简单的程序 编译并执行正常。 应该吗?
答案 0 :(得分:6)
这是C ++编译器实现的通用扩展,例如GNU的g ++。使用-std=c++0x
标志进行编译,将此类声明视为错误。
答案 1 :(得分:4)
包括gcc和clang在内的多个编译器支持可变长度数组作为扩展,即使这实际上是 C99 功能。
如果在使用-pedantic
或gcc
进行构建时使用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这样做,关于另一个 - 需要检查。