2010-05-19 12 views
26

Siempre pensé que al declarar una matriz en C++, el tamaño tiene que ser un valor entero constante.Declarar el tamaño de la matriz con una variable no constante

Por ejemplo:

int MyArray[5]; // correct 

o

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

pero

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

Aquí es también lo que se explica en The C++ Programming Language, by Bjarne Stroustrup:

El número de elementos de la matriz, la matriz encuadernada, debe ser una expresión constante (§C.5). Si necesita límites variables, use un vector (§3.7.1, §16.3). Por ejemplo:

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

Pero para mi gran sorpresa, el código anterior se compila bien en mi sistema!

Aquí es lo que he intentado compilar:

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

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

me dieron ningún error! Estoy usando GCC v4.4.0.

¿Hay algo que me falta?

+17

Y esta es la razón por la que probar algo con un compilador no significa nada en términos de corrección de código. – GManNickG

+1

Duplicado de http://stackoverflow.com/questions/737240/c-array-size-at-run-time-w-o-dynamic-allocation-is-allowed – nico

Respuesta

24

Esta es una extensión de GCC para el estándar: see here.

Puede usar la opción -pedantic para hacer que GCC emita una advertencia, o -std=c++98 para hacer un error, cuando utiliza una de estas extensiones (en caso de que la portabilidad sea una preocupación).

6

Está utilizando una característica de C99 que se denomina VLA (matrices de longitud variable). Sería mejor si compila su programa así:

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