tags:

views:

146

answers:

2

I always thought that when declaring an array in C++, the size has to be a constant integer value.

For instance :

int MyArray[5]; // correct

or

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

but

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

Here is also what is explained in The C++ Programming Language, by Bjarne Stroustrup :

The number of elements of the array, the array bound, must be a constant expression (§C.5). If you need variable bounds, use a vector(§3.7.1, §16.3). For example:

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

But to my big surprise, the code above does compile fine on my system !

Here is what I tried to compile :

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

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

I got no error ! I'm using GCC v4.4.0.

Is there something I'm missing ?

+6  A: 

This is a GCC extension to the standard: see here.

You can use the -pedantic option to cause GCC to issue a warning, or -std=c++98 to make in an error, when you use one of these extensions (in case portability is a concern).

Dean Harding
+3  A: 

You are using a feature from C99 which is called VLA(variable length arrays). It would be better if you compile your program like this:

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