Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовая по ит.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
484 Кб
Скачать
☆

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

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

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

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

uses MyUnit;

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

unit MyUnit;

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

uses {$U MY) MyUnit;

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

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

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

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

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

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

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

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

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

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