Опережающее определение процедур и функций.


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

Procedure A
Например: при уточнении подпрограммы (процедуры) А было решено, что она уточняется с помощью вызова двух подпрограмм (процедур) В и С.

Procedure С
Procedure B
> А

 


 

В С

 

 

2-й случай: сложная (взаимная) рекурсия

Procedure P
Procedure Q

 


Каждый из этих двух рассмотренных случаев связан с необходимостью определения порядка описания в программе используемых процедур: А, В, С, (1-й случай), P, Q (2-й случай).

Компилятор рассматривает текст программы сверху вниз. При этом все используемые (вызываемые) процедуры, функции, константы, переменные и метки должны быть известны (описаны) до момента их использования. В противном случае компилятор сообщит, что используется неизвестное имя, и воспримет это как ошибку. В первом случае, если описать процедуры в том порядке, в котором они появлялись в поле зрения разработчика программы (A – B – C) , то в процедуре А неизвестными окажутся имена В и С.

Есть две возможности устранения подобных ошибок:

1. Изменить порядок описания процедур в тексте программы.

В 1-ом случае, чтобы устранить ошибку нужно поместить описание процедур В и С перед описанием процедуры А.

Во 2-ом случае перестановка P и Q не к чему не приведет. Для устранения этой ошибки для процедур и функций есть директива forward. При ее использовании оба примера были бы записаны следующем образом:

1-й случай:

Одни заголовки (прототипы в Си)
procedure B (...); forward;

procedure C (...); forward;

procedure A (...);

Описание А
begin

...

Вызов процедуры В и С
B(...);

C(...);

...

end;

procedure B;

Описание В и С
begin

...

Замечания: 1) директива forward указывает компилятору, что описывается только заголовок. Полное описание будет сделано ниже по тексту программы. Задача оператора forward сделать известными имена процедур и функций (т.н. внешние имена). 2). В прототипе (опережающем описании) подпрограммы все параметры должны быть описаны полностью. А в заголовке подпрограммы при ее объявлении имена параметров можно опустить (оставить лишь тип): procedure B, procedure C, procedure Q. Можно опустить и список параметров и (для функций) тип возвращаемого значения, оставив лишь имя подпрограммы.  
end;

procedure C;

begin

...

end;

2-й случай:

procedure Q(...); forward;

procedure P(...);

begin

вызов Q(…);

...

end;

procedure Q;

begin

вызов Р(…);

...

end;



Дата добавления: 2016-05-28; просмотров: 2174;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.011 сек.