Inkrement-Operator



  • Hallo 314159265358979,

    heißt das, dass das Compiler-Abhängig ist, was passiert ?

    Danke im Voraus und Liebe Grüße



  • 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



  • $ 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


  • Mod

    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 ?


  • Mod

    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.


Anmelden zum Antworten