<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Dangling_else</id>
	<title>Dangling else - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Dangling_else"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Dangling_else&amp;action=history"/>
	<updated>2026-05-23T07:18:29Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Dangling_else&amp;diff=750551&amp;oldid=prev</id>
		<title>imported&gt;Lómelinde: :Kategorie:Wikipedia:Seite mit Syntaxhervorhebungsfehlern falsche Angabe lang=&quot;thinbasic&quot;  siehe auch Hilfe:Syntaxhighlight#Unterstützte Sprachen wurde wohl ersetzt oder geändert zu basic?</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Dangling_else&amp;diff=750551&amp;oldid=prev"/>
		<updated>2023-06-21T05:32:01Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Kategorie:Wikipedia:Seite_mit_Syntaxhervorhebungsfehlern&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Kategorie:Wikipedia:Seite mit Syntaxhervorhebungsfehlern (Seite nicht vorhanden)&quot;&gt;Kategorie:Wikipedia:Seite mit Syntaxhervorhebungsfehlern&lt;/a&gt; falsche Angabe lang=&amp;quot;thinbasic&amp;quot;  siehe auch &lt;a href=&quot;/index.php/Hilfe:Syntaxhighlight#Unterstützte_Sprachen&quot; title=&quot;Hilfe:Syntaxhighlight&quot;&gt;Hilfe:Syntaxhighlight#Unterstützte Sprachen&lt;/a&gt; wurde wohl ersetzt oder geändert zu basic?&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Das Problem des &amp;#039;&amp;#039;&amp;#039;dangling else&amp;#039;&amp;#039;&amp;#039; ({{enS|dangling}} ‚baumelnd‘) ist ein Beispiel für eine scheinbare Mehrdeutigkeit einer Programmiersprache, die für Verwirrung sorgen kann, insbesondere bei falscher Einrückung. Tatsächlich ist die Semantik in den meisten Sprachen eindeutig definiert, schon weil die Grammatik der Sprache sonst nicht eindeutig zerlegbar wäre. Das Problem taucht in einigen [[Programmiersprache]]n (wie [[C (Programmiersprache)|C]], [[C++]], [[Java (Programmiersprache)|Java]]) auf, wenn zwei verschachtelten [[Bedingte Anweisung und Verzweigung|if-Anweisungen]] nur ein else-Zweig gegenübersteht. Es kann nur auftreten, wenn eine optionale Klammerung weggelassen wird.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
;Beispiel in [[C (Programmiersprache)|C]]&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  if (a == 1)&lt;br /&gt;
    if (b == 1)&lt;br /&gt;
      a = 42;&lt;br /&gt;
  else&lt;br /&gt;
    b = 42;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel erwarten einige Nutzer, dass für den Fall &amp;lt;math&amp;gt;a \neq 1&amp;lt;/math&amp;gt; der Variablen &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; der Wert &amp;lt;math&amp;gt;42&amp;lt;/math&amp;gt; zugewiesen wird. Der Compiler bezieht den else-Zweig allerdings auf die letzte if-Abfrage. Das Programm wird in dem Fall keine Zuweisung ausführen. Soll dagegen tatsächlich &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; im Fall &amp;lt;math&amp;gt;a \neq 1&amp;lt;/math&amp;gt; der Wert &amp;lt;math&amp;gt;42&amp;lt;/math&amp;gt; zugewiesen werden, muss die äußere if-Anweisung geklammert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  if (a == 1)&lt;br /&gt;
  {&lt;br /&gt;
    if(b == 1)&lt;br /&gt;
      a = 42;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
    b = 42;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Andere Programmiersprachen&lt;br /&gt;
In einigen Sprachen wird das Problem umgangen, indem jedem &amp;#039;&amp;#039;if&amp;#039;&amp;#039; eine „schließende Klammer“ zugeordnet werden &amp;#039;&amp;#039;muss&amp;#039;&amp;#039;.&lt;br /&gt;
In der Skriptsprache [[Bourne-Shell]] steht beispielsweise &amp;#039;&amp;#039;fi&amp;#039;&amp;#039; für die schließende Klammer. Der obige Algorithmus lautet dann so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if [ $a -eq 1 ] ; then&lt;br /&gt;
  if [ $b -eq 1 ] ; then&lt;br /&gt;
    a=42&lt;br /&gt;
  fi&lt;br /&gt;
else&lt;br /&gt;
  b=42&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In anderen Programmiersprachen (z.&amp;amp;nbsp;B. [[Python (Programmiersprache)|Python]]) umgeht man das Problem, indem man durch Einrücken strukturiert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
if a == 1:&lt;br /&gt;
    if b == 1:&lt;br /&gt;
        a = 42&lt;br /&gt;
else:&lt;br /&gt;
    b = 42&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In [[Ada (Programmiersprache)|Ada]] tritt dieses Problem durch eine eindeutige syntaktische Klammerung nicht auf. Jedes IF wird durch ENDIF abgeschlossen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ada&amp;quot;&amp;gt;&lt;br /&gt;
IF a = 1 THEN&lt;br /&gt;
    IF b = 1 THEN&lt;br /&gt;
        a := 42;&lt;br /&gt;
    END IF;&lt;br /&gt;
ELSE&lt;br /&gt;
     b := 42;&lt;br /&gt;
END IF;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auch in Basic wird jedes IF entweder durch END IF abgeschlossen (wie in Ada) oder bei einer einzelnen Anweisung diese hinter THEN (ohne Zeilenumbruch) angegeben:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;basic&amp;quot;&amp;gt;&lt;br /&gt;
IF a = 1 THEN&lt;br /&gt;
    IF b = 1 THEN a = 42&lt;br /&gt;
ELSE&lt;br /&gt;
     b = 42&lt;br /&gt;
END IF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Lookahead]]&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* Guido Krüger: &amp;#039;&amp;#039;Handbuch der Java-Programmierung&amp;#039;&amp;#039;. 3. Auflage. Addison-Wesley, 2002, ISBN 3-8273-1949-8,+ Kapitel [https://dbs.cs.uni-duesseldorf.de/lehre/docs/java/javabuch/html/k100042.html#sectlevel4id006002001003 6.2 Verzweigungen]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Programmierung]]&lt;br /&gt;
[[Kategorie:Compilerbau]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Lómelinde</name></author>
	</entry>
</feed>