.
|
|
| Autor | Beitrag |
|---|---|
|
025 17.08.2002, 12:43 Onkel Dittmeyer |
Du meinst wohl es entspricht nicht dem ISO-C++ Std =) --Dieser Beitrag wurde am 17.08.2002 um 16:50 von [dP]ThEpOpE bearbeitet. |
|
Profil || Suche |
|
026 17.08.2002, 14:22 [PE]Spinator |
ich seh das problem nicht... This post was written using Opera 7.0 (http://www.opera.com) |
|
Profil || Suche |
|
027 17.08.2002, 16:43 theDon |
ja...aber es gibt compiler die das von rechts nach links auswerten...dann siehts anders auch :P --\o tanz den naziprau! o/ And more than ever, I hope to never fall, |
|
Profil || Suche |
|
028 17.08.2002, 22:38 Andy_ |
Von dort nach dort ist dumm gesagt, eigentlich macht das ja kein Compiler. 42 Es gibt keinen Sinn des Lebens. |
|
Profil || Suche |
|
029 17.08.2002, 23:42 theDon |
ich geb zu der vergleich passt nicht gut...aber das ergebnis ist compiler-abhängig --\o tanz den naziprau! o/ And more than ever, I hope to never fall, |
|
Profil || Suche |
|
030 18.08.2002, 04:19 Andy_ |
Das stimmt. --42 Es gibt keinen Sinn des Lebens. |
|
Profil || Suche |
|
031 18.08.2002, 11:24 [PE]Spinator |
bei den ++/-- operatoren ist die auswertungsreihenfolge nicht relevant, da sie vor bzw. nach der eigentlichen operation ausgeführt werden... --This post was written using Opera 7.0 (http://www.opera.com) |
|
Profil || Suche |
|
032 18.08.2002, 13:27 Kriz |
Falsch! Die Auswertungsreihenfolge ist nicht nur höchst relevant, sondern auch je nach Compiler extrem nichttrivial! Als Beispiel folgender Ausdruck: int a = 5, b = 6, erg = 0; Dieser Ausdruck scheint auf den ersten Blick mit gewissenhafter Abarbeitung von Priorität, Assoziativität und Rechenregeln einfach lösbar zu sein: erg = 5++ + ++6 * ++b - a++; // Prioritätenabarbeitung erg = 5 + 7 * ++7 - 6++; erg = 5 + 7 * 8 - 6; // Punkt vor Strich Dieses Ergebnis ist falsch! Das korrekte Ergebnis ist 64, weil der Compiler, BEVOR er überhaupt die Rechenregeln anwendet alle (!) Variablenwerte auf den Wert setzt, der ZULETZT errechnet worden ist. Im Klartext: erg = 5++ + ++6 * ++6 - 5++; // Ein einziger Durchlauf für alle Variablen Dieses Ergebnis kommt beim VC++ Compiler raus. Auch beim GNU Compiler kommt 64 raus. Diese Erkenntnis habe ich ehrlicherweise nicht gewußt, sondern durch Debuggersitzungen Schritt für Schritt zurückverfolgt. --K:R-I)Z++ |
|
Profil || Suche |
|
033 18.08.2002, 20:31 [PE]Spinator |
Ich bekomme trotz meiner sicht der Dinge auch das richtige resultat: int a = 5, b = 6, erg = 0; Das ganze kann man auch so schreiben: das ist jetzt fast wie deine 2. herleitung, und wie man sieht ist die auswertungsreihenvolge bei ++/-- tatsächlich nicht relevant, da jedesmal alle variablen vor/nach einer operation (also einer befehlszeile) in/dekrementiert werden, es wird nicht erst das b links/rechts inkrementiert, dann gerechnet, und anschliessend das andere... Könntest du mal deine herleitung erläutern? wieso 6? a müsste ja 7 sein am schluss... --This post was written using Opera 7.0 (http://www.opera.com) |
|
Profil || Suche |
|
034 18.08.2002, 23:18 Kriz |
Ja, ist auch 7, sorry =) --K:R-I)Z++ |
|
Profil || Suche |
|

