Процедуры и функции позволяют включать в основной программ-
ный блок дополнительные блоки. Каждое описание процедуры или
функции содержит заголовок, за которым следует программный блок.
Процедура активизируется с помощью оператора процедуры. Функция
активизируется при вычислении выражения, содержащего вызов функ-
ции, и возвращаемое функцией значение подставляется в это выраже-
ние.
Примечание: Определение блока вы можете найти в Главе
8 "Блоки, локальность и область действия".
В данной главе обсуждаются различные способы описания проце-
дуры или функции и их параметры.
Описания процедур
─────────────────────────────────────────────────────────────────
Описание процедуры позволяет связать идентификатор с проце-
дурным блоком. Процедуру можно затем активизировать с помощью
оператора процедуры.
┌─────────┐ ┌───┐ ┌────────────┐ ┌───┐
описание ───>│заголовок├──>│ ; ├──>│ тело ├──>│ ; ├──>
процедуры │процедуры│ └───┘ │подпрограммы│ └───┘
└─────────┘ └────────────┘
┌─────────┐ ┌─────────────┐
заголовок ──>│procedure├─┬>│идентификатор├──┐
процедуры └─────────┘ │ └─────────────┘ ^├──────────────────>
│ ┌─────────────┐ ││ ┌──────────┐ ^
│ │ уточненный │ ││ │ список │ │
└>│идентификатор├─┘└─>│формальных├─┘
│ метода │ │параметров│
└─────────────┘ └──────────┘
┌──────┐
блок ───┬──────────────────────────────┬──>│модуль├────────>
подпрограммы│ ┌─────────┐ ┌───┐ ^ │ └──────┘ ^
├──>│ near ├─────>│ ; ├───┘ │ ┌───────┐ │
│ └─────────┘ ^ └───┘ │──>│forward├───┤
│ ┌─────────┐ │ │ └───────┘ │
├──>│ far ├──┤ │ ┌─────────┐ │
│ └─────────┘ │ │──>│директива├─┤
│ ┌─────────┐ │ │ │ external│ │
├──>│ export ├──┤ │ └─────────┘ │
│ └─────────┘ │ │ ┌────────┐ │
│ ┌─────────┐ │ └──>│блок asm├──┤
├──>│interrupt├──┘ └────────┘ │
│ └─────────┘ ┌─────────┐ │
└─────────────────────────────────>│директива├─┘
│ inline │
└─────────┘
Заголовки процедур именуют идентификаторы процедур и задают
формальные параметры (если они имеются).
Примечание: Синтаксис списка формальных параметров по-
казан далее в этой главе в разделе "Параметры".
Процедура активизируется с помощью оператора процедуры, в
котором содержатся имя процедуры и необходимые параметры. Опера-
торы, которые должны выполняться при запуске процедуры, содержат-
ся в операторной части модуля процедуры. Если в содержащемся в
процедуре операторе внутри модуля процедуры используется иденти-
фикатор процедуры, то процедура будет выполняться рекурсивно (бу-
дет при выполнении обращаться сама к себе).
Приведем пример описания процедуры:
procedure NumString(N: integer; var S: string);
var
V: integer;
begin
V := Abs(N);
S := '';
repeat
S := Chr(N mod 10 + Ord('0')) + S;
N := N div 10;
until N = 0;
if N < 0 then S := '-' + S;
end;