Nach if wird else abgearbeitet???



  • Hallo zusammen.

    In einem Programm prüfe ich den Wert eines Vektors:

    if(iter->funktion == KEINE)
    {
       erg=iter->wert;
       iter++;
    }
    else
       erg=0;
    

    Der if-Block wird abgearbeitet und inkrementiert iter. Das Element auf das iter jetzt zeigt, würde die Abarbeitung des else-Zweiges rechtfertigen, aber doch nicht, wenn der if-Block bereits abgearbeitet wurde. Das bringt mein Verständnis von if-else ein bisschen ins Wanken.

    Kann mir jemand erklären, warum hier in beide Zweige abgebogen wird?

    Danke euch 🙂

    Gruß
    Kai



  • Wird nicht. Zeige kompilierbaren Code.

    https://www.c-plusplus.net/forum/304133



  • SG1 schrieb:

    Wird nicht. Zeige kompilierbaren Code.

    Den Code habe ich gerade nicht hier. Aber wenn ich einen Haltepunkt auf den if-Header setze, dann sehe ich im Einzelschritt, dass in den if-Block abgebogen wird, der Block abgearbeitet wird und anschließend in den else-Zweig huscht und die Variable, die er zuvor im if-Block mit dem gewünschten Wert gesetzt hat, im else-Zweig auf 0 setzt.



  • Dann debuggst Du etwas anderes als Du uns gezeigt hast.



  • Wenn das so wäre, dann hätte ich gestern Abend nicht so blöd aus der Wäsche geguckt.



  • Ich habe das mal eben auf der Arbeit nachgestellt - hier funktioniert es normal. Werde das nochmal von daheim aus machen, die Umgebung da ist etwas altmodischer - vielleicht ist mein Rechner einfach bald am Ende.
    Aber gut zu wissen, dass dieser eigenartige Programmablauf nicht der Regelfall ist.



  • Blind geraten, tippe ich auf nicht korrekte Klammersetzung. Da du im geziegten Code beim else die Klammer weggelassen hast, ist es gut möglich, dass du in deinem orginal Code noch eine Anweisung vor erg=0 hast und dementsprechend erg=0 immer ausgeführt wird.



  • oder da war versehentlich eion Semikolon nach dem else



  • daddy_felix schrieb:

    oder da war versehentlich eion Semikolon nach dem else

    Das ist das wahrscheinlichste. If/Else bedeutet entweder/oder. 🙂



  • Oder er debugged die Release Version. Da kann man auch manchmal die verrücktesten Sachen sehen.


Log in to reply