使用非常量变量声明数组大小

时间:2010-05-19 06:34:00

标签: c++ arrays gcc

我一直认为在C ++中声明一个数组时,大小必须是一个常数整数值。

例如:

int MyArray[5]; // correct

const int ARRAY_SIZE = 6;
int MyArray[ARRAY_SIZE]; // correct

int ArraySize = 5;
int MyArray[ArraySize]; // incorrect

以下是The C++ Programming Language, by Bjarne Stroustrup中解释的内容:

  

数组的元素数量(数组绑定)必须是常量表达式(§C.5)。   如果需要变量边界,请使用向量(§3.7.1,§16.3)。例如:

void f(int i) { 
   int v1[i];          // error : array size not a constant expression
   vector<int> v2(i);  // ok 
} 

但令我惊讶的是,上面的代码在我的系统上编译得很好!

这是我试图编译的内容:

void f(int i) {
   int v2[i];
}

int main()
{
   int i = 3;
   int v1[i];
   f(5);
}

我没有错! 我正在使用GCC v4.4.0。

我有什么遗失的吗?

2 个答案:

答案 0 :(得分:28)

这是标准的GCC扩展:see here

当您使用其中一个扩展程序时,可以使用-pedantic选项导致GCC发出警告,或-std=c++98发出错误(如果担心可移植性)。< / p>

答案 1 :(得分:5)

您正在使用C99中的一个名为VLA(可变长度数组)的功能。如果您编译这样的程序会更好:

g++ -Wall -std=c++98 myprog.cpp