Энциклопедия Turbo Pascal. Главы 9-11 - Неожиданные синтаксические ошибки

ОГЛАВЛЕНИЕ

Неожиданные синтаксические ошибки

Иногда вы будете встречаться с синтаксическими ошибками, которые трудно понять или даже распознать, как ошибки. В частности, необнаруживаемая ошибка произойдет, когда вы пытаетесь скомпилировать данный код:

     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. Однако, Турбо Паскаль укажет на ошибку в следующей строке. В данной простой программе легко обнаружить ошибку. Однако, в некоторых ситуациях вам пришлось бы потрудиться, чтобы найти то место, где пропущена точка с запятой.