Reputation: 27047
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 using GCC v4.4.0:
void f(int i) {
int v2[i];
}
int main() {
int i = 3;
int v1[i];
f(5);
}
Success?!?
Is there something I'm missing?
Upvotes: 31
Views: 27673
Reputation: 72678
This is a GCC extension to the standard:
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).
Upvotes: 32
Reputation: 96899
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
Upvotes: 6