16.4 Зависимость модулей

На верх  Назад  Вперёд

Когда программа использует модуль (скажем unitA ), а этот модуль тоже использует модуль (скажем unitB) , то программа косвенно зависит также от unitB. Это означает, что компилятор должен иметь доступ к unitB при попытке компиляции программы. Если модуль не присутствует во время компиляции, то возникает ошибка.

Обратите внимание, что косвенная зависимость программы ещё не определяет что идентификаторы модуля являются доступными. Для того, чтобы иметь доступ к идентификаторам модуля, модуль должен находиться в пункте uses программы или модуля, где необходимы эти идентификаторы.

Модули могут быть взаимно зависимы, то есть они могут ссылаться друг на друга при использовании (uses). Это допускается, при условии, что по крайней мере одна из ссылок сделана в разделе implementation (реализации) модуля. Это справедливо для взаимозависимых модулей (косвенным образом).

Компилятор выдаст ошибку, если оба модуля используют (uses) друг друга в разделе interface. Следующее объявление не допускается:

Unit UnitA;

interface

Uses UnitB;

implementation

end.

 

Unit UnitB

interface

Uses UnitA;

implementation

end.

А это, разрешено

Unit UnitA;

interface

Uses UnitB;

implementation

end.

 

Unit UnitB

implementation

Uses UnitA;

end.

Поскольку UnitB использует UnitA только в разделе реализации.

В общем, плохая идея, иметь взаимозависимые модули, даже если это только в разделах реализации!!! (это, по возможности, следует избегать)