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