Иногда вы будете встречаться с синтаксическими ошибками, ко-
торые трудно понять или даже распознать, как ошибки. В частности,
необнаруживаемая ошибка произойдет, когда вы пытаетесь скомпили-
ровать данный код:
program Errors; {данная программа не компилируется}
var
s: string[80];
procedure F1(x: string[80]);
begin
WriteLn(s);
end;
begin
ReadLn(s);
F1(s);
end.
Если вы попытаетесь скомпилировать эту программу, то увидите
следующее сообщение об ошибке:
Error 89: ")" expected
/ошибка 89: ожидалась ")"/
После нажатия клавиши ESC, вы обнаружите, что Турбо Паскаль
указывает на строку
procedure F1(x:string[80]);
с курсором в позиции, показанной стрелкой. Это недостаток Турбо
Паскаля? Нет. Турбо Паскаль не может использовать тип string в
вызовах процедур и функций. Вы должны явно декларировать свой тип
и применить его. В данном примере вы, во-первых, декларируете
тип, называемый str80 с помощью следующего предложения:
type
str80 = string[80];
Затем вы используете заново созданный тип str80, как тип па-
раметра для функции F1. Правильная программа выглядит следующим
образом:
program CorrectecError; {данная программа будет
скомпилирована}
type
str80 = string[80];
var
s := str80;
procedure F1(x: str80);
begin
WriteLn(x);
end;
begin
ReadLn(s);
F1(s);
end.
Другая, вносящая путаницу, синтаксическая ошибка порождается
следующей программой:
program Error; {данная программа не будет скомпилирована}
procedure F2;
var
t: integer;
begin
for t := 1 to 10 do WriteLn('hi there');
end
begin
F2;
end.
Ошибка здесь состоит в том, что точка с запятой отсутствует
после end в процедуре F2. Однако, Турбо Паскаль укажет на ошибку
в следующей строке. В данной простой программе легко обнаружить
ошибку. Однако, в некоторых ситуациях вам пришлось бы потрудить-
ся, чтобы найти то место, где пропущена точка с запятой.