Escuché (probablemente de un maestro) que uno debe declarar todas las variables encima del programa / función, y que declarar nuevas entre las declaraciones podría causar problemas.
Pero luego estaba leyendo K&R y me encontré con esta oración: "Las declaraciones de variables (incluidas las inicializaciones) pueden seguir a la llave izquierda que introduce cualquier declaración compuesta, no solo la que comienza una función". Sigue con un ejemplo:
if (n > 0){
int i;
for (i=0;i<n;i++)
...
}
Jugué un poco con el concepto y funciona incluso con matrices. Por ejemplo:
int main(){
int x = 0 ;
while (x<10){
if (x>5){
int y[x];
y[0] = 10;
printf("%d %d\n",y[0],y[4]);
}
x++;
}
}
Entonces, ¿cuándo exactamente no puedo declarar variables? Por ejemplo, ¿qué pasa si mi declaración de variable no está justo después de la llave de apertura? Como aquí:
int main(){
int x = 10;
x++;
printf("%d\n",x);
int z = 6;
printf("%d\n",z);
}
¿Podría esto causar problemas dependiendo del programa / máquina?
gcc
es bastante laxo. Estás usando declaraciones y matrices de longitud variable c99. Compile congcc -std=c89 -pedantic
y le gritarán. Sin embargo, de acuerdo con c99, todo eso es kosher.