Helmichs Informatik-Lexikon

Dangling-else-Problem

Betrachten Sie bitte folgenden Quelltext:

1   if (x < 10)
2      if (y < 10) 
3         ausgabe("O.K."); 
4   else  
5         ausgabe("Falsch!");

Was wird hier ausgegeben? Lassen Sie sich nicht von der Stellung des Schlüsselwortes else verwirren! Es wird hier der Eindruck erweckt, dass das else zum if in Zeile 1 gehört. Das ist aber nicht der Fall, ein else gehört immer zum jeweils vorhergehenden if, in unserem Fall also zum if in Zeile 2. Die Meldung "Falsch" wird also ausgegeben, wenn y nicht kleiner als 10 ist.

Dieses hier beschriebene Problem ist als "Dangling-else-Problem" in der Fachliteratur bekannt geworden. Es ist nicht nur von akademischem Interesse, sondern hat auch durchaus praktische Auswirkungen auf die tägliche Programmierarbeit.

Wenn man das Dangling-else-Problem vermeiden will, hilft manchmal der Einsatz von Klammern, selbst wenn sie eigentlich nicht notwendig wären:

1   if (x < 10)
2   {
3      if (y < 10) 
4         ausgabe("O.K."); 
5      else  
6         ausgabe("Falsch!");
7   }

Auch das korrekte Einrücken des Wortes "else" hilft zur Fehlervermeidung. Dieses else bezieht sich auf das "innere" if in Zeile 3. Wollte man eine Alternative, also einen else-Zweig im if in Zeile 1 schreiben, müsste man das so machen:

1   if (x < 10)
2   {
3      if (y < 10) 
4         ausgabe("O.K."); 
5   }
6   else  
7      ausgabe("Falsch!");
8   }

Hier ist der Einsatz der Klammern in Zeile 2 und 5 sogar zwingend, weil sich das else sonst auf das if in Zeile 3 beziehen würde.