ВУЗ:
Составители:
Рубрика:
23
Предварительное описание подпрограмм
Достаточно распространённым является случай, когда две
подпрограммы описанные рядом (т.е. на одном уровне вложенности),
содержат взаимные вызовы друг друга, например:
procedure tac(x,y:real);
begin………………………….
cat(3,2);
………………………….
end;
procedure cat(a,b:integer);
begin
…………………………..
tac(0.3,1.5);
………………………….
end.
При трансляции процедуры tac компилятор не может правильно
обработать вызов процедуры cat, т.к. эта процедура описана ниже по тексту
программы и информация о ней
ещё компилятору неизвестна. Если поменять
местами эти процедуры, то аналогичная ситуация возникнет с трансляцией
вызова процедуры tac в процедуре cat.
Чтобы разрешить эту проблему следует выполнить предварительное
описание подпрограмм.
Предварительное описание содержит заголовок подпрограммы, а
вместо тела записывается служебное слово FORWARD, которое указывает,
что полное описание подпрограммы следует дальше по тексту. В этом случае
заголовок полного описания тела процедуры может быть записан в
сокращенном виде, без списка параметров и для функций без типа
результата.
Например:
……………………………….
procedure tac(x,y:real);forward;
procedure cat(a,b:integer);forward;
……………………………….
procedure tac;
……………………………….
begin
cat(3,2);
……………………………….
24
end;
procedure cat;
begun
tac(0.3,1.5);
……………………………….
end;
Теперь при трансляции вызова cat в процедуре tac компилятор
использует информацию о процедуре cat из заголовка её предварительного
описания, это ещё раз подчёркивает тот
факт, что заголовок подпрограммы
содержит исчерпывающие сведения, необходимые для корректного вызова
подпрограммы.
При предварительном описании подпрограммы далее в тексте должно
обязательно содержаться описание полного текста подпрограммы, даже если
нигде в программе не встречается вызов этой подпрограммы.
Предварительное описание подпрограмм применяется для «развязки»
закольцованных программ.
Внешнее описание подпрограмм
Если подпрограмма или группа подпрограмм разработаны вне
системы Турбо Паскаль, на другом языке (например, на ассемблере)
необходимо её подключить к программе следующим образом.
Объектный код подключаемой программы должен содержаться в
некотором OBJ–файле, а в паскаль-программе необходимо указать заголовок
подключаемой программы, после которого вместо тела подпрограммы
должно следовать служебное слово EXTERNAL. Кроме
того, где-либо в
тексте программы необходимо задать директиву компилятору $L,
аргументом которого является имя OBJ–файла, содержащего код
подключаемой подпрограммы, например:
procedure SqRoots(a,b,c:real); external;
………………………………………..
{$L ROOTS.OBJ}.
OBJ–файлы должны при этом удовлетворять определённым
требованиям к используемой модели памяти и способу передачи значений.
Гарантируется совместимость кодов, полученных компилятором Турбо
Ассемблер. Не должно быть проблем и с кодами
ассемблера MASM или ему
Предварительное описание подпрограмм end; procedure cat; Достаточно распространённым является случай, когда две begun подпрограммы описанные рядом (т.е. на одном уровне вложенности), tac(0.3,1.5); . содержат взаимные вызовы друг друга, например: end; Теперь при трансляции вызова cat в процедуре tac компилятор procedure tac(x,y:real); использует информацию о процедуре cat из заголовка её предварительного begin . описания, это ещё раз подчёркивает тот факт, что заголовок подпрограммы cat(3,2); . содержит исчерпывающие сведения, необходимые для корректного вызова end; подпрограммы. procedure cat(a,b:integer); При предварительном описании подпрограммы далее в тексте должно begin обязательно содержаться описание полного текста подпрограммы, даже если .. нигде в программе не встречается вызов этой подпрограммы. tac(0.3,1.5); . Предварительное описание подпрограмм применяется для «развязки» end. закольцованных программ. При трансляции процедуры tac компилятор не может правильно обработать вызов процедуры cat, т.к. эта процедура описана ниже по тексту Внешнее описание подпрограмм программы и информация о ней ещё компилятору неизвестна. Если поменять Если подпрограмма или группа подпрограмм разработаны вне местами эти процедуры, то аналогичная ситуация возникнет с трансляцией системы Турбо Паскаль, на другом языке (например, на ассемблере) вызова процедуры tac в процедуре cat. необходимо её подключить к программе следующим образом. Чтобы разрешить эту проблему следует выполнить предварительное Объектный код подключаемой программы должен содержаться в описание подпрограмм. некотором OBJфайле, а в паскаль-программе необходимо указать заголовок Предварительное описание содержит заголовок подпрограммы, а подключаемой программы, после которого вместо тела подпрограммы вместо тела записывается служебное слово FORWARD, которое указывает, должно следовать служебное слово EXTERNAL. Кроме того, где-либо в что полное описание подпрограммы следует дальше по тексту. В этом случае тексте программы необходимо задать директиву компилятору $L, заголовок полного описания тела процедуры может быть записан в аргументом которого является имя OBJфайла, содержащего код сокращенном виде, без списка параметров и для функций без типа подключаемой подпрограммы, например: результата. Например: procedure SqRoots(a,b,c:real); external; . .. procedure tac(x,y:real);forward; {$L ROOTS.OBJ}. procedure cat(a,b:integer);forward; OBJфайлы должны при этом удовлетворять определённым . procedure tac; требованиям к используемой модели памяти и способу передачи значений. . Гарантируется совместимость кодов, полученных компилятором Турбо begin Ассемблер. Не должно быть проблем и с кодами ассемблера MASM или ему cat(3,2); . 23 24
Страницы
- « первая
- ‹ предыдущая
- …
- 10
- 11
- 12
- 13
- 14
- …
- следующая ›
- последняя »