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.