Компиляция этого фрагмента кода с помощью 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
... и т.д.
Что здесь происходит?
EDIT: Компиляция с помощью "g++ -Wall" вместо этого дает мне предупреждение, как я ожидал:
In function ‘int main()’: warning: ‘p’ is used uninitialized in this function