Inkrement-Operator
-
$ g++ main.cpp -o main -Wall main.cpp: In Funktion »int main()«: main.cpp:8:14: Warnung: Operation auf »a« könnte undefiniert sein [-Wsequence-point]
Undefiniert heißt undefiniert. Nicht "bei VS so, bei GCC so".
-
Zagatho_zero87 schrieb:
Das sieht mir Wirklich nach undefiniertem Verhalten aus!
Visual C++ sagt, dass a 4 ist, code::blocks und bloodshare devC++ 3!Trotzdem komisch... denn die Reihenfolge der Ausführung sollte ja gleich sein!
mfg Patrik
Wieso sollte sie das?
Ist eben undefiniertes Verhalten! Und der gcc machts anders als der MSVC.
-
Ethon schrieb:
Wieso sollte sie das?
Ist eben undefiniertes Verhalten! Und der gcc machts anders als der MSVC.Ja schon klar! undefiniertes Verhalten ist undefiniertes Verhalten!
Aber für sowas gibts die Prioritätsauswertung!mfg Patrik
-
Nein, eben nicht. Verstehst du überhaupt, was undefiniertes Verhalten bedeutet und wieso dieser Code undefiniert ist?
-
SeppJ schrieb:
Nein, eben nicht. Verstehst du überhaupt, was undefiniertes Verhalten bedeutet und wieso dieser Code undefiniert ist?
undefiniertes Verhalten bedeutet, dass man nicht weiß, wie sich der Compiler verhaltet und was am Ende heraus kommt!
Nein weiß ich nicht, aber mochts gern wissen als bereicherung!
mfg
Patrik
-
Zagatho_zero87 schrieb:
Ja schon klar! undefiniertes Verhalten ist undefiniertes Verhalten!
Aber für sowas gibts die Prioritätsauswertung!Ich glaube, du hast da etwas falsch verstanden. Die Auswertungsreihenfolge der Operanden hat überhaupt gar nichts mit der Priorität zu tun, sondern ist undefiniert. Die Priorität besagt nur, welche Operanden ein Operator an sich bindet; nicht mehr und nicht weniger. Im Endeffekt bedeutet das sozusagen, dass unsichtbare Klammern gesetzt werden.
Zagatho_zero87 schrieb:
undefiniertes Verhalten bedeutet, dass man nicht weiß, wie sich der Compiler verhaltet und was am Ende heraus kommt!
Undefiniertes Verhalten bedeutet einfach, dass man nicht weiß, wie sich das Programm zur Laufzeit verhält. Vielleicht bekommst du z.B. einen Bluescreen.
-
Hallo
Die Sprache legt die Reihnfolge der Auswertung nicht fest.
Die einzigen Operatoren die eine Reinfolge angeben sind: && , || , (? : ) und der Kommaoperator.anneXus
-
anneXus schrieb:
Die einzigen Operatoren die eine Reinfolge angeben sind: && , || , (? : ) und der Kommaoperator.
Das was du meinst, bezieht sich doch auf die Abarbeitungsreihenfolge des Ausdrucks, nicht aber auf die Auswertung der Operanden, oder nicht?
-
hat das hier nicht wieder was mit diesen "sequence points" zu tun? oder bin ich da jetzt auch total auf dem holzweg ?
-
Psycho schrieb:
hat das hier nicht wieder was mit diesen "sequence points" zu tun? oder bin ich da jetzt auch total auf dem holzweg ?
Jain. Im Ausdruck des Threaderstellers sind eben keine, das ist ja das Problem. Zwischen den Operanden von && , || , (? : ) und dem Kommaoperator (nicht dem Komma bei Funktionsparametern!) wäre einer.