Hi Daniel,
Mit solchen Konstrukten kann man es aber sicher übertreiben.
Was gibt zum Beispiel i = 1; i += ++i + i++ und warum? ;-)
C macht es sich da einfach - das Ergebnis ist (sinnvollerweise) undefiniert (aka Compilerabhängig).
ansonsten:
a)der rechte Ausdruck wird von rechts nach links ausgewertet, Postincrement erfolgt später:
++i + i++;
1
2
Ausdruck=3
a-1)Der += Operator wird vor dem Postincrement ausgeführt:
a-1-1)Das linke i wird vor Auswerten des rechten Ausdrucks ermittelt
i(links)=1
1+=3 = 4, mit Postincrement = 5 !!
a-1-2)Das i wird nach Auswerten des rechten Ausdrucks ermittelt
i(links)=3
3+=3 = 6, mit Postincrement = 7 !!
a-2)Der += Operator wird nach dem Postincrement ausgeführt:
a-2-1)Das linke i wird vor Auswerten des rechten Ausdrucks ermittelt
i(links)=1++=2
2+=3 =5, mit Postincrement = 6 !!
a-2-2)Das i wird nach Auswerten des rechten Ausdrucks ermittelt
i(links)=3++=4
4+=3 = 7 !!
b)der rechte Ausdruck wird von links nach rechts ausgewertet:
++i + i++;
2
2
Ausdruck=4
...
b-2)Der += Operator wird nach dem Postincrement ausgeführt:
...
b-2-2)Das linke i wird nach Auswerten des rechten Ausdrucks ermittelt
i(links)=4++=5
5+=4=9 !!
...
c)der rechte Ausdruck wird von rechts nach links ausgewertet, der Postincrement wird unmittelbar nach Auswerten des ersten i ausgeführt:
++i + i++
1
3
Ausdruck = 4
...
c-2-2)Das linke i wird nach Auswerten des rechten Ausdrucks ermittelt
4+=4=8 !!
...
Immerhin habe ich alle zwischen 5 und 9 hinbekommen ...
Gruss,
Carsten
P.S: Die Auswerterichtung ist in C von rechts nach links definiert. (Damit wird der b Teil dann hinfällig)