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

Процедурные типы. Параметры-функции и параметры-процедуры.

Стандартные процедуры (функции) Турбо Паскаля не могут передаваться рассмотренным способом.

В программе могут быть объявлены переменные процедурных типов, например, так:

var
p1: Proc1;
f1, f2: Func2;
р: array [1..N] of Proc1;

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

type
Proc = Procedure (n: word; var a: Byte);
var
ProcVar: Proc; x, у: Byte;
Procedure Procl(x: word; var y: Byte); far;
begin
if x > 255 then
у: = x mod 255
else
у: = Byte(x)
end;
begin {Главная программа}
ProcVar: = Proc1;
for x: = 150 to' 180 do
begin
ProcVar (x + 100, y);
Write (y:8)
end
end.

Разумеется, такого рода присваивания допустимы и для параметров-функций, например:

type
FuncType = Function (i: Integer): Integer;
var
VarFunc: FuncType;
i: Integer;
Function MyFunc (count: Integer): Integer; far;
begin
…….
end; {MyFunc}
begin {Основная программа}
…….
i: = MyFunc(1); {Обычное использование результата функции}
…….
VarFunc: = MyFunc;
{Присваивание переменной процедурного типа имени функции MyFunc}
…….
end.

Отметим, что присваивание:

VarFunc: = MyFunc(1);

Будет недопустимым, так как слева и справа от знака присваивания используются несовместимые типы: слева – процедурный тип, а справа – INTEGER; имя функции со списком фактических параметров MyFunc(1) трактуется Турбо Паскалем как обращение к значению функции, в то время как имя функции без списка параметров рассматривается как имя функции.

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

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