Иллюстрированный самоучитель по Turbo Pascal

Рекурсия и опережающее описание. Расширенный синтаксис вызова функций.

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

Procedure A (i: Byte);
begin
…….
В (i);
…….
end;
Procedure В (j: Byte);
…….
begin
…….
A(j);
…….
end;

Если строго следовать правилу, согласно которому каждый идентификатор перед употреблением должен быть описан, то такую программную конструкцию использовать нельзя. Для того, чтобы такого рода вызовы стали возможны, вводится опережающее описание:

Procedure В(j: Byte); forward;
Procedure A(i: Byte);
begin
…….
В (i);
…….
end;
Procedure В;
begin
…….
A(j);
…….
end;

Как видим, опережающее описание заключается в том, что объявляется лишь заголовок процедуры В, а ее тело заменяется стандартной директивой FORWARD. Теперь в процедуре А можно использовать обращение к процедуре В – ведь она уже описана, точнее, известны ее формальные параметры, и компилятор может правильным образом организовать ее вызов. Обратите внимание: тело процедуры В начинается заголовком, в котором уже не указываются описанные ранее формальные параметры.

Расширенный синтаксис вызова функций

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

{$Х+} {Включаем расширенный синтаксис}
Function My.Func (var x: Integer): Integer;
begin
if x<0 then x: = 0
else MyFunc: = x+10
end; {MyFunc}
var
i: Integer;
begin {main}
i: = 1;
i: = 2*MyFunc(i) – 100; {Стандартный вызов функции}
MyFunc (i) {Расширенный синтаксис вызова}
end. {main}

Расширенный синтаксис делает использование функций таким же свободным, как, например, их использование в языке Си, и придает Турбо Паскалю дополнительную гибкость. С помощью расширенного синтаксиса нельзя вызывать стандартные функции. Компиляция с учетом расширенного синтаксиса включается активным состоянием опции EXTENDED SYNTAX диалогового окна OPTIONS/COMPILER (см. прил.1) или глобальной директивой компилятора {$Х+}.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.