Из 6.3.2.1 (выделено мной)
Если lvalue обозначает объект с автоматическим временем хранения, который мог быть объявлен с классом хранения регистра (его адрес никогда не был взят), и этот объект не инициализирован (не объявлен с инициализатором и без присвоения это было выполнено до использования), поведение не определено.
Это означает, что если автоматический объект не может быть объявлен с классом хранения регистра (занят его адрес):
int x;
printf("just a dummy pointer print %p", &x); //taking the address to break 6.3.2.1 UB condition
if (x == 2)
{
print("x uninitialized value: %d", x);
}
Чем согласно 6.3.2.1 в if (x == 2)
нет поведения undefined, где я использую значение неинициализированного объекта. Если это правда, и здесь нет UB, то каково определенное поведение? что я должен ожидать в x
по стандарту?
&x;
, достаточно, чтобы выполнить условие, чтобы оно не было UB. - person R.. GitHub STOP HELPING ICE   schedule 15.10.2019