Mein Code ist wie folgt:
%Vor%Angesichts der Art des post-increment würde ich die folgende Ausgabe erwarten:
%Vor% Mein Argument ist, dass in Zeile 5 x
nach dem Inkrement dem Anfangswert zugewiesen werden sollte.
Stattdessen bekomme ich das jedoch:
%Vor%Wenn ich in die Versammlung eingrabe, sieht das für mich wie eine bewusste Entscheidung aus:
%Vor%Was ist hier los? Versucht der GCC, mich vor mir selbst zu retten? Ich habe keine Sprachreferenz zur Hand, aber ich hätte gedacht, dass dies die beabsichtigte Semantik durchbricht.
Das Verhalten ist nicht definiert, da es keinen intervenierenden Sequenzpunkt in x = x++
gibt, siehe z.B. die C FAQ .
Standards beiseite (da dies in Bezug auf den Standard undefiniert ist), ist die Art, wie es lief, so, wie ich es erwartet hätte.
Meine Faustregel ist, dass Sie für eine Zeile mit x++
die Zeichenfolge x++
durch x
ersetzen und x += 1
in die folgende Zeile (oder die vorherige Zeile für die Vorinkrementierung) einfügen.
Nach dieser Faustregel würde Ihr Code als
geschrieben werden %Vor%Wenn Sie haben:
%Vor%Was passiert, ist, dass b in a gespeichert wird und nachdem die Zuweisung erfolgt ist, wird b um eins erhöht. Also wenn du es tust:
%Vor%und vorher x war 10 was passieren wird ist 10 wird in x gespeichert und danach (bevor dein printf fertig ist) wird x um eins auf 11 erhöht. Deshalb wird 11 gedruckt.
Tags und Links c gcc post-increment