if... else... Frage



  • Hallo!
    Ich wüsste gern mal was von den C++-Experten unter Euch:
    Wenn ich Code wie diesen habe

    if(Bedingung1)
      if(Bedingung2)
        doanything();
      else
        dosthdifferent();
    

    auf welches if() bezieht sich dann das else? Oder anders gefragt: wird dosthdifferent() aufgerufen, wenn Bedingung1 nicht zutrifft oder wenn Bedingung1 zwar erfüllt ist aber nicht Bedingung2?
    Ist dies im C++-ANSI Standard festgelegt oder vom Compiler abhängig?

    Danke für Eure Hilfe!

    Mr Train



  • ifs und else's beziehen sich immer direkt aufeinander. Wie der code eingerückt ist, spielt dabei keine Rolle. bei deinem Beispiel würde das else auf das zweite if bezogen werden. Besser ist es, die Bedingungen in eigene Gültigkeitsbereiche zu packen

    if(/*...*/)
    {
        if(/*...*/)
        {
        }
        else
        {
        }
    }
    

    Dann sieht man sofort, worauf sich das else bezieht



  • Ob es im Standard steht weiß ich nicht, aber allgemein wird bei Parsern meistens das "Innere" stärker gebunden, da man normalerweise längste Ableitungen sucht. "Dangling Else" oder "Shift/Reduce conflict" wären Themen wonach du suchen kannst, falls du dich mehr dafür interessierst.


Anmelden zum Antworten