Компиляция и использование модулей
Модуль компилируется точно таким же образом, как и обычные подпрограммы. Но так как модуль не является непосредственно выполняемой единицей, то в результате его компиляции образуется дисковый файл с расширением .TPU (Turbo Pascal Unit), при этом имя файла берется из имени файла с исходным текстом модуля.
Для доступа к ресурсам модуля используется конструкция, называемая спецификацией модуля:
USES
U1, u2, u3;
Эта спецификация должна следовать непосредственно за заголовком программы; если модуль использует объекты другого модуля, то такая спецификация должна следовать после служебного слова interface. Необходимо особо отметить следующие важные моменты, связанные с использованием модулей:
12. В случае перекрытия идентификаторов интерфейсной части используемого модуля с идентификаторами программы, следует учитывать следующее правило: интерфейсные идентификаторы модуля, указанного первым в uses = списке, образуют самый внешний блок программы, и все остальные на него накладываются, закрывая одноименные идентификаторы. Однако можно обойти и этот нюанс: в модуле объявлена переменная x;
Program p;
Uses A;
Var x: integer;
Begin
….
End.
Для того, чтобы в программе P иметь доступ к интерфейсной переменной x необходимо задать составное имя
A.x :=Round(x);
13. Возможны случаи косвенного использования
Например:
unit A; unit B;
interface interface
....... uses A;
end. .......
end.
Если некоторая программа использует модуль В, то в соответствующей спецификации использования необходимо указать только модули, непосредственно используемые в программе.
Например:
program P;
uses
B;
.....
end.
14. Схема использования модулей может иметь древовидную структуру, но не перекрывающуюся.
Так, например, следующие отношения являются ошибочными:
unit A; unit B;
interface interface
uses B; uses B;
..... .....
end. end.
15. Если в модуле имеется раздел инициализации, то операторы из этого раздела будут выполнены перед началом выполнения программы, в которой используется данный модуль. Если программа использует несколько модулей, то их разделы инициализации будут выполнены в том же порядке, в котором эти модули перечислены в спецификации использования.
16. Можно использовать директиву $U для переопределения имени файла. Эта директива имеет параметр, который трактуется как "настоящее" имя файла с данным модулем. Она должна находиться непосредственно перед именем модуля в спецификации использования. Например, конструкция:
uses {$U MY} MyUnit;
приведет к тому, что компилятор будет искать код модуля MyUnit в дисковом файле MY.TPU.