(Dlaczego) używa niezainicjowanego niezdefiniowanego zachowania?

Jeżeli mam:

unsigned int x;
x -= x;

jest oczywiste, żex powinien bądź zero po tym wyrażeniu, ale wszędzie, gdzie patrzę, mówiązachowanie tego kodu jest nieokreślony, a nie tylko wartośćx (aż do odejmowania).

Dwa pytania:

Jestzachowanie tego kodu rzeczywiście niezdefiniowane?
(Np. Czy kod może ulec awarii [lub gorzej] na zgodnym systemie?)

W takim razie,czemu C mówi, żezachowanie jest niezdefiniowane, gdy jest to całkowicie jasnex powinno być tutaj zero?

tj. co to jestkorzyść biorąc pod uwagę, nie definiując tutaj zachowania?

Oczywiście kompilator może po prostu użyćcokolwiek wartość śmieci uznana za „przydatną” w zmiennej i działałaby zgodnie z przeznaczeniem ... co jest nie tak z tym podejściem?

questionAnswers(7)

yourAnswerToTheQuestion