Einzelnen Beitrag anzeigen

Popov
(Gast)

n/a Beiträge
 
#9

AW: [Quiz] wann darf auf ein Semikolon ein ELSE folgen?

  Alt 1. Apr 2015, 13:40
Danke für die Antworten soweit! Es gibt allerdings noch ein weiteres Konstrukt bei dem nach einem Semikolon ein else folgen kann. Wer kennt es?
Ich würde trotz dem Kein sagen, denn vor Else kann im Grunde kein Semikolon stehen. Ich bin zwar kein Pascal-Crack, aber paar Regeln kenne ich dann doch: jede Anweisung muss/wird in einem Block ausgeführt und das Semikolon gibt das Ende der Anweisung oder Blocks an.

Somit gibt es vor diesen Else kein Semikolon:
Delphi-Quellcode:
case eingabe of
 1: ausgabe := 'Sie haben 1 eingegeben';
 2: ausgabe := 'Sie haben 2 eingegeben';
 3: ausgabe := 'Sie haben 3 eingegeben';
 else ausgabe := 'Sie haben nicht 1, 2 oder 3 eingegeben';
end;
denn auch wenn hier kein begin..end Block zwischen case..of und else steht, case..of und else sind ein Block. case..of wird mit einem end; abgeschlossen, nicht mit einem Semikolon wie bei einer If-Abfrage. Also, entweder bilden case..of und else einen Block oder case..of und end; . Womit es egal ist ob hier vor else ein Semokolon steht, denn das hat keinen Einfluß auf else . Denn das Semikolon ist in einem Block eingeschlossen.

Wo gibt es Blocks?
Delphi-Quellcode:
begin..end;
repeat..until
while..end;
try..except..else..end;
case..of..else..end;
usw.
Bei case..of..else bilden case..of und else einen Block, genau wie begin und end . Das Gleiche gilt für try..except..else . Somit sind das keine Ausnahmen, denn except..else bilden einen Block wie begin..end .

Bei if..then..else ist das anders. if..then else bilden keinen Block. Pascal geht somit davon aus, dass wenn zwischen then und else kein begin..end Block steht, es sich um eine einzelne Anweisung handelt. Und da man if..then mit und ohne else ausführen kann, sagt das Semikolon, dass hier die Abfrage zu ende ist. Wenn dann in der nächsten Zeile ein else auftaucht, dann ist es eine undefinierte Anweisung.

Geändert von Popov ( 1. Apr 2015 um 15:09 Uhr)
  Mit Zitat antworten Zitat