Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции информатика - Семестр 2.doc
Скачиваний:
5
Добавлен:
01.04.2025
Размер:
516.1 Кб
Скачать

15.1. Компиляция и использование модулей

Модуль компилируется точно таким же образом, как и обычные подпрограммы. Но так как модуль не является непосредственно выполняемой единицей, то в результате его компиляции образуется дисковый файл с расширением .TPU (Turbo Pascal Unit), при этом имя файла берется из имени файла с исходным текстом модуля.

Для доступа к ресурсам модуля используется конструкция, называемая спецификацией модуля:

USES

U1, u2, u3;

Эта спецификация должна следовать непосредственно за заголовком программы; если модуль использует объекты другого модуля, то такая спецификация должна следовать после служебного слова interface. Необходимо особо отметить следующие важные моменты, связанные с использованием модулей:

  1. В случае перекрытия идентификаторов интерфейсной части используемого модуля с идентификаторами программы, следует учитывать следующее правило: интерфейсные идентификаторы модуля, указанного первым в uses = списке, образуют самый внешний блок программы, и все остальные на него накладываются, закрывая одноименные идентификаторы. Однако можно обойти и этот нюанс: в модуле объявлена переменная x;

Program p;

Uses A;

Var x: integer;

Begin

….

End.

Для того, чтобы в программе P иметь доступ к интерфейсной переменной x необходимо задать составное имя

A.x :=Round(x);

  1. Возможны случаи косвенного использования

Например:

unit A; unit B;

interface interface

....... uses A;

end. .......

end.

Если некоторая программа использует модуль В, то в соответствующей спецификации использования необходимо указать только модули, непосредственно используемые в программе.

Например:

program P;

uses

B;

.....

end.

  1. Схема использования модулей может иметь древовидную структуру, но не перекрывающуюся.

Так, например, следующие отношения являются ошибочными:

unit A; unit B;

interface interface

uses B; uses B;

..... .....

end. end.

  1. Если в модуле имеется раздел инициализации, то операторы из этого раздела будут выполнены перед началом выполнения программы, в которой используется данный модуль. Если программа использует несколько модулей, то их разделы инициализации будут выполнены в том же порядке, в котором эти модули перечислены в спецификации использования.

  2. Можно использовать директиву $U для переопределения имени файла. Эта директива имеет параметр, который трактуется как "настоящее" имя файла с данным модулем. Она должна находиться непосредственно перед именем модуля в спецификации использования. Например, конструкция:

uses {$U MY} MyUnit;

приведет к тому, что компилятор будет искать код модуля MyUnit в дисковом файле MY.TPU.

15.2. Компиляция и поиск модулей.

При трансляции программы или модуля, использующего другие модули, компилятор последовательно отыскивает файлы, содержащие коды используемых модулей, с тем чтобы подключить их к компилируемой программе. При этом компилятор работает по следующей схеме:

  1. Компилятор просматривает содержимое системного библиотечного файла модулей TURBO.TPL (TURBO PASCAL LIBRARY).

  2. Если искомый модуль не найден в файле TURBO.TPL, то компилятор осуществляет поиск соответствующего TPU-файла в ТЕКУЩЕМ каталоге.

  3. Если в текущем каталоге нужный файл не найден, то поиск продолжается в каталогах, заданных в альтернативе Options/Directories/Unit Directories для интегрированной среды или в параметре /U вызова TPC-компилятора.

  4. Если на предыдущих шагах файл не найден, то компилятор прекращает работу и выдает диагностическое сообщение об ошибке.

  5. Если компилятор активизирован посредством альтернатив Compile/Make или Compile/Build, то вышеуказанные шаги проводятся в поисках ИСХОДНЫХ ТЕКСТОВ используемых модулей, которые будут оттранслированы перед трансляцией самой программы. При этом подразумевается, что имя файла с текстом модуля совпадает с именем модуля и имеет расширение .PAS.