(Почему) использует неинициализированную переменную неопределенного поведения?

Если у меня есть:

unsigned int x;
x -= x;

ясно, чтоx should быть нулем после этого выражения, но везде я смотрю, они говорятbehavior этого кода не определено, а не просто значениеx (пока до вычитания).

Два вопроса:

Is the behavior of this code indeed undefined?
(E.g. Might the code crash [or worse] on a compliant system?)

If so, why does C say that the behavior is undefined, when it is perfectly clear that x should be zero here?

i.e. What is the advantage given by not defining the behavior here?

Понятно, что компилятор может просто использоватьwhatever ценность мусора, которую он счел "удобной" внутри переменной, и она будет работать как задумано ... что не так с этим подходом?

Ответы на вопрос(7)

Ваш ответ на вопрос