2

像这样的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

4 回答 4

6

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

于 2013-09-20T14:17:16.717 回答
4

包括gccclang在内的一些编译器支持可变长度数组作为扩展,即使这确实是C99特性。

如果-pedantic在构建时使用参数 withgccclang两者都将给出类似于以下内容的警告:

warning: variable length arrays are a C99 feature [-Wvla-extension]
于 2013-09-20T14:17:30.270 回答
2

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

在 g++ 中,如果您使用-pedantic.

于 2013-09-20T14:17:42.493 回答
1

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

于 2013-09-20T14:18:20.340 回答