Реальная причина, по которой ;
не допускается перед if-then else
, заключается в том, чтобы избежать двусмысленности с менее известным родственником, case-of else
.
Соблюдайте следующий фрагмент.
case enum1 of
male: writeln('hallo');
female: if a=1 then writeln('oops'); <<-- watch this space.
else writeln('neither')
end;
Поскольку после строки oops стоит ;
, else принадлежит оператору case, а не if.
Если вы пропустите ;
, остальное принадлежит a = 1 if
.
Вот почему ;
не разрешен перед if
else.
Лично проработав в Паскале около 20 с лишним лет, я все же поставил ;
перед остальными, потому что я поставил ;
в стиле Си. И компилятор все еще дает мне ошибку, можно подумать, что компилятор уже научился бы.