Модуль компилируется так же, как и обычные программы, но так как модуль сам по себе не выполняем, то в результате получается специальный файл с расширением TPU (Turbo Pascal Unit).
Для того чтобы получить доступ к интерфейсным объектам модуля, необходимо указать в программе имя нужного TPU-файла в разделе спецификаций используемых модулей, идущего сразу за заголовком:
USES <список модулей>;
При ее наличии в программе считаются известными все описания из интерфейсной части подключенного модуля, и к ним можно обращаться так же, как если бы они были описаны в самой этой программе:
Program Prim;
Uses Complex;
Var R,X,Y,Z: Complex;
Begin
Read (X.RE,X.IM,Y.RE,Y.IM,Z.RE,Z.IM);
R:= CADD(CMUL(X,Y),CADD(CMUL(X,Z),CMUL(Y,Z)));
Writeln(R.RE,’+’,R.IM,’i’)
end.
Правила использования.
1. Иногда некоторые имена используемого модуля могут совпадать с именами использующей его программы. Тогда интерфейсные имена модуля, указанного в списке первым, образуют самый внешний блок программы, имена второго модуля образуют блок, вложенный в первый и т.д.
Например, в программе есть спецификация:
Uses A,B;
то вложенность блоков будет следующей:
То есть имена выполняемой программы «экранируют» одинаковые имена модулей А и В. Получить доступ к одноименным переменным модуля можно, используя составное имя.
Пусть есть модуль:
Unit A;
Interface
Var X:Real;
Procedure Pr(Y:integer);
implementation
......
end.
Пусть программа, использующая этот модуль, так же содержит переменную Х:
Program P;
Uses A;
Var X:Integer;
Begin
......
X:=8; { определение внутренней целой переменной }
A.X:=2.5; { переменная модуля }
Pr(X); { X - фактический целый параметр-значение }
......
end.
2. Разрешены косвенные использования модулей. Причем в спецификации использования указываются только модули, непосредственно используемые в программе. Пример косвенного использования модуля А в программе Р:
Unit A; Unit B; Program P;
Interfase Interfase Uses B;
...... Uses A;.....
end....... end.
end.
3. Схема взаимного использования модулей может иметь структуру любой сложности, но недопустимо явное или косвенное обращение модуля к самому себе.
Unit A; Unit B;
Interfase Interfase
Uses B; Uses A; <- недопустимо
............
4. При наличии раздела инициализации операторы модуля выполняются первыми в порядке описания:
Program P;
Uses A,B;
......
Выполняются:
1) операторы модуля А;
2) операторы модуля В;
3) операторы программы Р.
5. Рекомендуется, чтобы имя модуля совпадало с именем файла на внешнем носителе информации, например:
Unit Module1;
......
Текст программы необходимо поместить в файл Module1.pas, а оттранслированный модуль будет находиться в файле Module1.tpu. При необходимости хранить код модуля в файле с другим именем используют директиву компилятора $U. Она имеет параметр дискового имени файла с данным модулем и должна находится непосредственно перед именем модуля в спецификации пользователя. Например, запись
Uses {$U MY} MyUnit;
приведет к тому, что компилятор будет искать код модуля MyUnit в файле MY.TPU.