(Warum) verwendet eine nicht initialisierte Variable undefiniertes Verhalten?

Wenn ich habe:

unsigned int x;
x -= x;

es ist klar, dassx sollte nach diesem Ausdruck Null sein, aber überall, wo ich hinschaue, sagen sie dasVerhalten Dieser Code ist undefiniert, nicht nur der Wert vonx (bis vor der Subtraktion).

Zwei Fragen:

Ist derVerhalten von diesem Code in der Tat undefiniert?
(Zum Beispiel könnte der Code auf einem kompatiblen System abstürzen?)

Wenn ja,Warum sagt C, dass dieVerhalten ist undefiniert, wenn es vollkommen klar ist, dassx sollte hier Null sein?

Was ist das?Vorteil gegeben, indem das Verhalten hier nicht definiert wird?

Natürlich könnte der Compiler einfach verwendenwas auch immer Müllwert, den es als "praktisch" in der Variablen erachtete, und es würde wie beabsichtigt funktionieren ... was ist falsch an diesem Ansatz?

Antworten auf die Frage(7)

Ihre Antwort auf die Frage