la compilación de este fragmento de código con gcc (4,5) y otros tantos -Wall, -Wextra, banderas de tipo -Wuninitialized enciende posible me da ninguna advertencia:¿Es esto válido C? Sin advertencia sobre p siendo desinicializar
int main() {
int *p = p;
printf("p = %p\n", (void *)p);
return 0;
}
Pero se ejecutan múltiples veces da esta salida:
p = 0xbe9ff4
p = 0x550ff4
p = 0xeb1ff4
p = 0x4caff4
... y así sucesivamente.
¿Qué está pasando aquí?
EDIT: Compilar con "g ++ -Wall" en lugar me da aviso que yo esperaría:
In function ‘int main()’: warning: ‘p’ is used uninitialized in this function
Parece que ha engañado al compilador ... – vines
Lo he visto antes en alguna parte. No sé si es un comportamiento válido, pero seguramente indefinido. – Marlon
Llamar a una función que acepta una cantidad variable de argumentos sin un prototipo en el ámbito es UB. Tu compilador puede hacer lo que quiera – pmg