(Почему) использует неинициализированную переменную неопределенного поведения?
Если у меня есть:
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 ценность мусора, которую он счел "удобной" внутри переменной, и она будет работать как задумано ... что не так с этим подходом?