Mi comprensión siempre ha sido que cuando declaro una matriz en la pila con un tamaño que viene como una variable o parámetro, debería obtener un error.¿Por qué no obtengo un error de compilación al declarar una matriz C con tamaño variable?
Sin embargo, me di cuenta de que no obtengo ningún error si no inicializo explícitamente la matriz (sí, no estará en la pila, pero me pregunto por la falta de error). Por ejemplo, el siguiente código no se compila debido matriz2:
#define N 30
void defineArrays(int n)
{
int i,j;
int array1[N] = {};
int array2[n] = {};
for(i=0; i<N; ++i) array1[i] = 0;
for(j=0; j<n; ++j) array2[j] = 0;
}
Pero el código siguiente se compila y se ejecuta, incluso cuando envío un verdadero n de la principal:
#define N 30
void defineArrays(int n)
{
int i,j;
int array1[N] = {};
int array2[n];
for(i=0; i<N; ++i) array1[i] = 0;
for(j=0; j<n; ++j) array2[j] = 0;
}
lo que me falta ¿aquí? ¿Está declarando array2 como un puntero? Estoy usando gcc
Actualización: Gracias por todos los que respondieron. El problema era que mi versión de gcc estaba por defecto en C99 por algún extraño motivo (o no tan extraño, tal vez soy demasiado viejo), y asumí incorrectamente que está predeterminado en C90 a menos que le diga lo contrario.
Joder, no me he dado cuenta de C99 ahora. He estado usando g ++ por mucho tiempo. – Uri
@Uri No +1 en su pregunta, debido a su maldición. – Alex