Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник 139.docx
Скачиваний:
4
Добавлен:
30.04.2022
Размер:
206.28 Кб
Скачать

3.8. Вызов процедур и функций

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

Вызов процедуры (функции) должен сопровождаться соответствующим указанием – директивой.

Вызов процедур осуществляется с помощью оператора вызова. Он состоит из идентификатора процедуры с перечнем действительных параметров в круглых скобках.

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

Допустим, что необходимо воспользоваться процедурой, описание которой было сделано до написания главной программы, т. е. в разделе описания процедур. Например,

PROGRAM IT _IS_MY ;

(* разделы описания меток, констант, типов, переменных *)

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

(* раздел описаний процедур и функций * )

PROCEDURE line ( x, y, z );

type

t: integer;

l: char;

var

x, y, i, j: t;

z : l;

begin

for i : = x то j := y do write ( z ) ;

end;

Тогда вызов этой процедуры в одном из последующих блоков главной программы I T –IS – MY будет оформляться следующим образом:

( * главная программа * )

begin

a: = ‘ * ‘;

x: = 10;

j : = 50;

line ( x, y, a );

end.

Однако если описание процедуры ( функции ) выполнено вслед за написанием блоков программы, а вызов такой процедуры необходимо сделать в одном из блоков, то в этом случае необходимо воспользоваться директивой FORWARD. Она укажет на то, что описание процедуры следует за её вызовом. Например,

(* главная программа *)

begin

a: = ‘ *’ ;

x: = 10;

y : = 50;

line ( x, y, z ); forvard;

end

( * описание процедуры line *)

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

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

1. Внешняя процедура написана на языке Паскаль.

2. Внешняя процедура написана на каком–то другом языке.

В первом случае вызов необходимо оформить с использованием директивы EXTERNAL. Например,

line (a, b, c); external;

Во втором случае вместо директивы FORWARD необходимо указать директиву NONPASCAL. Например,

line (a, b, c); nonpascal;

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

Программисту необходимо помнить о следующих ограничениях:

1. Если в качестве параметров допускаются процедуры и функции, то это могут быть такие процедуры и функции, собственные параметры которых являются значениями.

2. Действительными параметрами не могут быть стандартные процедуры и функции.

3. Компоненты упакованных структур не могут быть действительными параметрами.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]