#include <stdio.h>
int main() {
int c = c;
printf("c is %i\n", c);
return 0;
}
Sto definendo una variabile intera denominata c
e sto assegnando il suo valore a se stesso. Ma come può anche questo essere compilato? c
non è stato inizializzato, quindi come può essere assegnato il suo valore a se stesso? Quando eseguo il programma, ottengo c is 0
.Perché questo codice C viene compilato?
Suppongo che il compilatore stia generando codice assembly che assegna lo spazio per la variabile c
(quando il compilatore rileva l'istruzione int c
). Quindi prende qualsiasi valore indesiderato in quello spazio non inizializzato e lo assegna a c
. E 'questo che sta succedendo?
Sfortunatamente, è permesso - si può normalmente fare in modo che il compilatore emetta un avvertimento su di esso, per esempio usando g ++ (ma non gcc per qualche motivo) usando il flag -Wall genera un avvertimento. –
@Neil, per forzare un errore con gcc, si usa '-Werror = non inizializzato -Winit-self' –