Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BorlandPascal.doc
Скачиваний:
54
Добавлен:
17.03.2015
Размер:
2.83 Mб
Скачать

Секция реализации

В секции реализации определяются модули всех глобальных про-

цедур или функций. В ней также описываются константы, переменные,

процедуры и функции, являющиеся локальными, то есть недоступными

основной программе.

Секция реализации

¦

¦ --------------- -------------------

L->¦implementation+-T------------------>¦ раздел описаний +-->

L--------------- ¦ ------------^ L-------------------

L->¦ оператор +-

¦ uses ¦

L------------

По механизму действия описания процедур и функций в интер-

фейсная секция аналогична опережающему описанию, хотя директива

forward не указывается. Таким образом, эти процедуры и функции

могут быть определены (и к ним можно обращаться в любой последо-

вательности) в секции реализации.

Допускается дублирование заголовков процедур и функций из

интерфейсной части. Вам не нужно при этом задавать список фор-

мальных параметров, но если вы это делаете, компилятор на этапе

компиляции в случае несовпадения описаний в интерфейсной части и

секции реализации будет выдавать сообщение об ошибке.

Секция инициализации

Секция инициализации является последней секцией модуля. Она

может состоять либо из зарезервированного слова end (в этом слу-

чае модуль не содержит кода инициализации), либо из операторной

части, которая должна выполняться для инициализации модуля.

----

секция инициализации ---T-->¦end+------------------>

¦ L---- ^

¦ ------------------ ¦

L->¦операторная часть+--

L------------------

Секции инициализации модулей, которые используются програм-

мой, выполняются в том же порядке, в каком модули указаны в опе-

раторе uses.

Косвенные ссылки на модули

В операторе uses в основной программе должны содержаться

имена всех модулей, непосредственно или косвенно используемых ос-

новной программой. Рассмотрим следующий пример:

Program Prog;

uses Unit1, Unit2

const a = b;

begin

end.

end.

unit Unit2;

interface

uses Unit1;

const b = c;

implementation

end.

unit Unit1;

interface

const c = 1;

implementation

const d = 2;

end;

В данном примере Unit12 непосредственно зависит от Unit1, а

Prog непосредственно зависит от Unit2. Кроме того, Prog зависит

косвенно от Unit1 (через Unit1), хотя ни один из описанных в

Unit1 идентификаторов в Prog не доступен.

Для компиляции программы компилятор должен иметь возможность

находить все модули, от которых она прямо или косвенно зависит.

Поэтому, для компиляции Prog компилятор должен иметь возможность

найти и Unit1, и Unit2, иначе возникнет ошибка.

Когда в интерфейсную часть модуля вносятся изменения, другие

модули, использующие этот модуль, должны быть заново скомпилиро-

ваны. При использовании команд Make или Build компилятор делает

это автоматически. Однако, если изменения коснулись только секции

реализации или секции инициализации, то другие модули, в которых

используется этот модуль, перекомпилировать не нужно. В предыду-

щем примере, если интерфейсная часть модуля Unit1 изменилась

(например, с = 2), то модуль Unit2 нужно перекомпилировать. Изме-

нение же секции реализации (например, d = 1) не требует переком-

пиляции Unit2.

При компиляции модуля в Borland Pascal на основе контрольной

суммы интерфейсной секции вычисляется номер версии модуля. В пре-

дыдущем примере при компиляции модуля Unit2 в скомпилированной

версии модуля Unit2 сохраняется номер версии модуля Unit1. При

компиляции основной программы номер версии модуля Unit1 сравнива-

ется с номером версии, сохраненным в модуле Unit2. Если номера

версий не совпадают, что свидетельствует об изменении в интер-

фейсной части модуля Unit1 со времени последней компиляции модуля

Unit2, компилятор, в зависимости от режима компиляции, выдает со-

общение об ошибке или перекомпилирует модуль Unit2 (в зависимости

от режима компиляции).

Соседние файлы в предмете Программирование на Pascal