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

Приложение 2 Ключи и директивы компилятора

Директивы компилятора Турбо Паскаля управляют режимами компиляции программ в выполнимый код (в памяти или на диске). Они представляют собой комментарии со специальным синтаксисом. Турбо Паскаль допускает директивы компилятора везде, где допускаются комментарии.

Директива компилятора начинается со знака «$», стоящего первым после открывающего граничного знака комментария. Непосредственно после знака «$» следует имя (одна или несколько букв), которое определяет конкретные директивы. Имеются три типа директив:

  1. Ключи выбора режимов. Включают конкретные режимы компиляции или выключают их с помощью указания знаков «+» или «-» сразу после имени ключа.

  2. Директивы с параметрами. Задают параметры, оказывающие влияние на компиляцию, например имена включаемых файлов и размеры памяти.

  3. Директивы (ключи) условной компиляции. Используются для управления порядком компиляции частей исходного текста, основанной на определении пользователем условных символов.

Все директивы за исключением директив переключения должны иметь, по крайней мере, один пробел между именем директивы и параметром.

Директивы компилятора можно разместить непосредственно в исходном коде программы. Можно также изменить применяемые по умолчанию директивы с помощью компилятора, использующего командную строку (ТРС.ЕХЕ) или с помощью компилятора, работающего в диалоговой среде (TURBO.EXE). Все директивы компилятора можно задавать с помощью меню выбора режимов компиляции (Options/Compiler Menu). Все вносимые в меню изменения будут иметь силу при последующих компиляциях. При использовании компилятора ТРС.ЕХЕ директивы компилятора можно либо задавать в командной строке (например, ТРС /$R+ ИмяПрограммы), либо поместить их в файл конфигурации TPC.CFG. Директивы компилятора, которые содержатся в исходном тексте программы, всегда отменяют принятые по умолчанию значения директив.

Ключи режимов компиляции

Выравнивание данных

Синтаксис: {$А+} или {$А-}

Режим по умолчанию: {$А+}

Тип: Глобальный

Эквивалент меню: Option/Compiler/Align Data

Ключ $А позволяет переключаться между выравниванием переменных и {540} типизированных констант по границе слова и по границе байта. Для процессора 8088 выравнивание на границу слова игнорируется, однако для всех процессоров 80X86 такое выравнивание означает более быстрое выполнение, поскольку адресация ко всем элементам, имеющим размер в слово, или четным адресам происходит за один цикл обращения к памяти вместо двух.

В состоянии {$А+} все переменные и типизированные константы, превышающие по размеру один байт, выравниваются по границе машинного слова (адреса с четными значениями). В случае необходимости между переменными для достижения выравнивания по границе слова включаются дополнительные неиспользуемые байты. Ключ {$А+} не влияет ни на переменные размером в байт, ни на поля структур или элементы массивов. Поле записи будет выравниваться по границе слова только в том случае, если общий размер всех следующих перед ним полей будет иметь четное значение. Аналогично, для любого элемента массива выравнивание по границе слова будет иметь место только, когда размер элементов имеет четное значение.

В состоянии {$А-} никаких действий по выравниванию не предпринимается. Переменные и типизированные константы независимо от их размера помещаются в этом случае просто по следующему доступному адресу.

Независимо от режима $А каждое описание VAR и CONST всегда начинается на границе слова. Подобным образом компилятор всегда старается поддерживать указатель стека (SPtr) выравненным по границе слова, для чего в случае необходимости выделяется дополнительный неиспользуемым байт.

Схема логических (Булевских) вычислений

Синтаксис: {$B+} или {$B-}

Режим по умолчанию: ($B-}

Тип: Локальный

Эквивалент меню: Options/Compiler/Boolean Evaluation

Этот ключ определяет два различных вида генерирования кода для булевских операторов and и or.

В состоянии {$В+} компилятор генерирует код для полного вычисления булевского выражения. Это значит, что каждый операнд булевского выражения, состоящий из операторов and и or, будет вычислен даже, если результат всего выражения заранее известен.

В состоянии {$В-} компилятор генерирует код для вычисления булевского выражения по короткой схеме, т. е. вычисление прекратится сразу, как только станет очевидным результат всего этого выражения.

Информация для отладки

Синтаксис: {$D+} или {$D-}

Режим по умолчанию: {$D+}

Тип: Глобальный

Эквивалент меню: Options/Compiler/Debug Information

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

Когда этот режим включен для программы или модуля, встроенный отладчик Турбо Паскаля позволяет выполнять операторы по шагам и устанавливать в тексте точки останова. Кроме того, при появлении ошибки во время выполнения программы или программного модуля, который был скомпилирован с включенным режимом генерации информации об отладке ({$D+}), Турбо Паскаль может определить оператор в исходном тексте, приведший к появлению ошибки.

Эмуляция математического сопроцессора

Синтаксис: {$Е+} или {$Е-}

Режим по умолчанию: {$E+}

Тип: Глобальный

Эквивалент меню: Options/Compiler/Emulation

Ключ эмуляции разрешает или запрещает компоновку с библиотекой, которая будет эмулировать работу сопроцессора 80X87 в случае его отсутствия. При компиляции программы в состоянии {$N+, E+} Турбо Паскаль выполняет компоновку с полным эмулятором 80X87. Полученный в результате выполнимый файл может использоваться на любой ПЭВМ независимо от наличия сопроцессора 80X87. Если исполняющая система находит такой сопроцессор, то она его использует. В противном случае он эмулируется с помощью средств библиотеки.

В состоянии {$N+, E-} Турбо Паскаль будет выполнять компоновку с существенно меньшей по размеру библиотекой средств работы с плавающей запятой, которая может использоваться только при наличии сопроцессора 80X87.

При использовании в модуле переключатель эмуляции сопроцессора 80X87 не оказывает никакого влияния. Он действует только при компоновке программы.

Выбор модели вызовов (FAR или NEAR)

Синтаксис: {$F+} или {$F-}

Режим по умолчанию: {$F-}

Тип: Локальный

Эквивалент меню: Option/Compiler/Force Far Calls

Ключ компилятора $F управляет выбором типа вызова компилируемых процедур и функций в выполнимом коде. Процедуры и функции, скомпилированные в состоянии {$F+}, всегда используют дальнюю модель обращений (FAR). При указании директивы {$F-} Турбо Паскаль автоматически выбирает соответствующий тип обращений: дальний, если процедура или функция описывается в разделе интерфейса модуля, и ближний (NEAR) в противном случае.

Если программа использует оверлеи, то предполагается, что в начале этой программы и в начале каждого модуля помещен ключ {$F+}, позволяющий построить вызовы по дальней модели. Для программ с процедурными переменными все такие процедуры должны применять вызовы типа FAR. {542}

Режим контроля ввода-вывода

Синтаксис {$I+} или {$I-}

Режим по умолчанию: {$I+}

Тип: Локальный

Эквивалент меню: Option/Compiler/I/O Checking

Ключ $I задает или отменяет автоматическое генерирование кода, проверяющего результат обращения к процедурам ввода-вывода. Если процедура ввода-вывода не может выполниться корректно, то при включенном переключателе {$I+} программа завершает работу, выводя на экран сообщения об ошибке во время выполнения. Если режим отключен ({$I-}), то результат операции ввода-вывода не прервет программы и может быть проанализирован с помощью функции IOResult.

Информация о локальных символах

Синтаксис {$L+} или {$L-}

Режим по умолчанию: {$L+}

Тип: Глобальный

Эквивалент меню: Options/Compiler/Local Symbols

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

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

При включенных режимах Options/Link/Map-File и Debug/Stand-Alone Debugging отладчик позволяет получить информацию о локальных символах данного модуля, если он компилировался в режиме {SL+}.

Для модулей информация о локальных символах записывается в TPU-файле наряду с объектным кодом модуля. Эта информация увеличивает размер файлов (требуется дополнительное пространство), но на размер и скорость работы выполняемой программы это влияния не оказывает.

Ключ, задающий включение информации о локальных символах, обычно используется вместе с ключом отладочной информации, который позволяет включить или выключить генерацию таблицы номеров строк для отладки. Заметим, что в том случае, если режим генерации отладочной информации выключен ({$D-}), директива $L будет игнорироваться.

Режим использования математического сопроцессора

Синтаксис: {$N+} или {$N-}

Режим по умолчанию: {$N-}

Тип: Глобальный

Эквивалент меню: Option/Compiler/Numeric Processing {543}

Этим ключом осуществляется выбор одной из двух моделей генерирования кодов вычислений с плавающей запятой, имеющихся в Турбо Паскале. При указании режима {$N-} генерируется код для программного выполнения всех вещественно-числовых вычислений. При режиме {$N+} генерируется код для выполнения всех таких вычислений аппаратно с помощью математического сопроцессора 80X87.

Заметим, что для эмуляции сопроцессора 80X87 можно также использовать директиву {$Е+}. Это даст возможность применять специальные вещественные типы данных без необходимости установки микросхемы сопроцессора.

Генерация оверлейного кода

Синтаксис: {$О+} или {$О-}

Режим по умолчанию: {$О-}

Тип: Глобальный

Эквивалент меню: Options/Compiler/Overlays Allowed

Ключ режима $О разрешает или запрещает генерацию оверлейного кода. Турбо Паскаль позволяет использовать модуль в качестве оверлейного только в том случае, если он был скомпилирован с директивой {$О+}. В этом случае генератор выполняемого кода принимает особые меры при передаче строки от одного оверлейного модуля другому и при установке постоянных параметров.

Задание данного режима при компиляции модуля не обязывает использовать данный модуль в качестве оверлейного. Режим обеспечивает возможность использования данного модуля в качестве оверлейного, если это потребуется. При разработке модулей, которые планируется использовать как в оверлейном, так и в неоверлейном вариантах, директива {$О+} разрешит и то, и другое.

Ключ режима компиляции {$О+} почти всегда используется совместно с ключом {$F+}, что позволяет выполнить требования подсистемы управления оверлеями по генерации дальнего типа вызовов.

Режим проверки границ (диапазонов)

Синтаксис: {$R+} или {$R-}

Режим по умолчанию: {$R-}

Тип: Локальный

Эквивалент меню: Options/Compiler/Range-Checking

Данный ключ приводит в действие и отменяет генерирование кода проверки границ. При указании {$R+} все выражения с индексированными строками и массивы проверяются на предмет нахождения индекса внутри их границ, а все операторы присваивания скалярным и переменным величинам типа «диапазон» проверяются на принадлежность заданным границам. Если обнаруживается нарушение диапазона, то программа завершает свою работу, выводя сообщения об ошибке времени выполнения. Приведенная в действие проверка границ замедляет работу программы и увеличивает ее размер. Используйте этот режим при отладке, а затем после получения отлаженной программы отмените его. {544}

Режим проверки переполнения стека

Синтаксис {$S+} или {$S-}

Режим по умолчанию: {$S+}

Тип: Локальный

Эквивалент меню: Options/Compiler/Stack-Checking

В зависимости от режима приводится в действие или отменяется генерирование кода проверки переполнения стека. При указании {$S+} компилятор генерирует в начале каждой процедуры или функции код, который проверяет, достаточное ли место в стеке выделено для локальных переменных. Если в стеке места недостаточно, то обращение к процедуре или функции, скомпилированное с указанием {$S+}, приводит к завершению работы программы, которая при этом выводит сообщение об ошибке времени выполнения. При указании {$S-} подобное обращение наиболее вероятно приведет к фатальной ошибке системы («зависанию»).

Режим проверки параметров строкового типа

Синтаксис: {$V+} или {$V-}

Режим по умолчанию: {$V+}

Тип: Локальный

Эквивалент меню: Options/Compiler/Var-String Checking

Ключ $V управляет проверкой типа при передаче строк в качестве параметров-переменных. В состоянии {$V+} выполняется строгая проверка типа, при которой требуется, чтобы формальный и фактический параметр имели идентичные строковые типы. В состоянии {$ V-} в качестве фактического параметра допускается использовать любую переменную строкового типа, даже если ее описанная длина не совпадает с длиной соответствующего формального параметра.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]