#include <stdio.h>
int main() {
int c = c;
printf("c is %i\n", c);
return 0;
}
Estoy definiendo una variable entera llamada c
, y estoy asignando su valor a sí mismo. Pero, ¿cómo puede esto incluso compilar? c
no se ha inicializado, entonces, ¿cómo se puede asignar su valor a sí mismo? Cuando ejecuto el programa, obtengo c is 0
.¿Por qué compila este código C?
Supongo que el compilador está generando código de ensamblado que está asignando espacio para la variable c
(cuando el compilador encuentra la instrucción int c
). Luego toma el valor no deseado que esté en ese espacio no inicializado y lo vuelve a asignar al c
. ¿Esto es lo que está pasando?
Desafortunadamente, está permitido: normalmente puede hacer que el compilador emita una advertencia al respecto, por ejemplo, al usar g ++ (pero no gcc por algún motivo) al utilizar el indicador -Wall produce una advertencia. –
@Neil, para forzar un error con gcc, utiliza '-Werror = uninitized -Winit-self' –