Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Модули в Pascal и Delphi лекция.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
215.55 Кб
Скачать

5 Компиляция модулей: tpu-файлы

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

Заголовок модуля имеет значение, так как программа или другой модуль, ис­пользующие данный, будут ссылаться на него в uses-специ­фикации. Поэтому при трансляции программы, использующей модули, компилятор должен каким-то обра­зом отыскать коды этих модулей, чтобы подключить их к компилируемой программе. Принято за правило, что имя файла, содержащего исходный текст модуля, долж­но совпадать с именем этого модуля (расширение имени файла при этом несущественно, но по умолчанию предпола­гается .PAS). Компилятор помещает код модуля, получен­ный в результате трансляции, в файл с таким же именем и расширением .TPU. При трансляции же программы, исполь­зующей этот модуль, компилятор ищет TPU-файл с именем, заданным в uses-спецификации, и связывает его с кодом программы. Таким образом, в спецификации использования фактически задаются не имена модулей, а имена файлов, их содержащих.

Например, для спецификации

uses MyUnit;

помещенной в некоторой программе, компилятор перед трансляцией самой программы должен найти внешний файл с именем MYUNIT.TPU. В этом файле должен находить­ся код модуля с заголовком вида

unit MyUnit;

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

uses {$U MY} MyUnit;

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

6 Компиляция: поиск модулей. Файл turbo.Tpl

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

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

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

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

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

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

Сначала компилятор при поиске используемых модулей анализирует системный файл TURBO.TPL. Этот файл имеет специальную структуру и пред­назначен для компактного хранения и быстрого доступа к наиболее часто используемым модулям. Обычно в этом фай­ле содержатся несколько системных (стандартных) модулей, однако с помощью специальной служебной программы TPUMOVER можно конструировать файл TURBO.TPL, включая в него нужные модули и удаляя неиспользуемые.

Понятие библиотеки модулей является потенциально удобным, но, к сожалению, Turbo Pascal поддерживает только один библиотечный модуль. Нельзя сформировать библиоте­ку модулей в некотором TPL-файле и обеспечить подключе­ние к программе модулей из этой библиотеки.