x += x++; sollte das gleiche sein wie
x += x;
x++;
gleich
x = x + x;
x = x +1;
10 = 5 + 5;
11 = 10 +1;
Ich habs im GCC probiert, kommt 11 und 12 raus. Es gibt aber unter den vielen Compilerswitches auch welche die diese Verhalten beeinflussen, und da wirds dann typisch C-doof
Zitat:
f() + x * g()
da sollte auch 7 rauskommen, auch wenn das Verhalten "undokumentiert" ist. Der Formalparser wird zuerst x * g() auflösen. Dabei gehen Funktionsaufrufe vor Variablen. D.h. also 1. g() dann 2. * x und 3. + f(), ergibt 7. Das sollte ebenfalls in jeder Borland PASCAL Version identische Resulate liefern, unabhängig von den Compilerswitches. Denoch ist es undokumentiert. Ein schlechter Stil ist es aber aus anderen Gründen. Wir programmieren indem wir saubere Schnittstellen/Black Boxes erzeugen. Da aber in diesem Beispiel Funktionsresulate und Modifikation globaler Variablen kombiniert werden, dh. funktion g() liefert im Grunde gleich 2 Resultate (Resulat und x+1) zurück. Das ist schlechter Programmierstil da die Modifikation von X nicht in der Schnittstelle zur Black Box g() sichtbar ist.
Das Beispiel sieht aber sehr konstruiert aus, ich habe bisher noch nie solchen Code im realen Einsatz gesehen.
Gruß Hagen