В операторе 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 (в зависимости
от режима компиляции).