Ich habe gehört (wahrscheinlich von einem Lehrer), dass man alle Variablen über dem Programm / der Funktion deklarieren sollte und dass das Deklarieren neuer Variablen unter den Anweisungen Probleme verursachen könnte.
Aber dann las ich K & R und stieß auf diesen Satz: "Deklarationen von Variablen (einschließlich Initialisierungen) können der linken Klammer folgen, die eine zusammengesetzte Aussage einführt, nicht nur die, die eine Funktion beginnt." Er folgt mit einem Beispiel:
if (n > 0){
int i;
for (i=0;i<n;i++)
...
}
Ich habe ein bisschen mit dem Konzept gespielt und es funktioniert sogar mit Arrays. Zum Beispiel:
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++;
}
}
Wann genau darf ich keine Variablen deklarieren? Was ist zum Beispiel, wenn meine Variablendeklaration nicht direkt nach der öffnenden Klammer steht? Wie hier:
int main(){
int x = 10;
x++;
printf("%d\n",x);
int z = 6;
printf("%d\n",z);
}
Könnte dies je nach Programm / Maschine zu Problemen führen?
gcc
ist ziemlich locker. Sie verwenden c99-Arrays und -Deklarationen variabler Länge. Kompilieren Sie mitgcc -std=c89 -pedantic
und Sie werden angeschrien. Laut c99 ist das alles koscher.