user2079303 erklärt schön (+1 von mir bereits), als Erweiterung, ich werde ein wenig mehr ins Detail gehen:
if(x++)
auswertet der Wert von x vor die Inkrementierung, so dass dieses kleine Stück Code ist an folgenden Äquivalent (Notwendigkeit, den alten Wert zu puffern!):
int tmp = x;
x++;
if(tmp)
beachten Sie, dass innerhalb von c && cc
, die zweite Bedingung cc
wird nicht mehr ausgewertet, wenn c
bereits falsch ist! So ist if(x && y)
entspricht
if(x)
{
if(y)
{
// ...
}
}
alles Putting zusammen, ist der Code dieser Variante äquivalent, wo ich die if-Klausel in Codezeilen jedes nur eine einzige Anweisung enthält, getrennt:
int x = 0;
int y = 0;
int tmp = x;
x++;
if(tmp)
{
tmp = y;
y++;
if(tmp)
y += 2;
}
Angenommen , Ihre Ausgabe ist jetzt ziemlich offensichtlich ...
Welches Ergebnis haben Sie erwartet? – TZHX
Denken Sie daran, dass die booleschen Operatoren * eine Kurzschlussauswertung * verwenden. Und dass die Post-Inkrement-Operatoren den * ursprünglichen * Wert (vor Inkrement) zurückgeben. Und diese Null ist gleich "falsch". –