Компиляция этого фрагмента кода с gcc (4.5) и включением как можно большего числа флагов -Wall, -Wextra, -Wuninitialized не дает никаких предупреждений:
int main() {
int *p = p;
printf("p = %p\n", (void *)p);
return 0;
}
Но его многократное выполнение выдает:
p = 0xbe9ff4
p = 0x550ff4
p = 0xeb1ff4
p = 0x4caff4
... и т. Д.
Что здесь происходит?
РЕДАКТИРОВАТЬ: Компиляция с "g ++ -Wall" вместо этого дает мне предупреждение, как я ожидал:
In function ‘int main()’: warning: ‘p’ is used uninitialized in this function