path: Главная\Статьи\Директивы компилятора\Переключатели от $I до $Q


язык:Turbo Pascal

$I: Проверка ввода/вывода

Включает или выключает автоматическую генерацию объектного кода, которая проверяет результат обращения к процедуре ввода/вывода.

 Синтаксис:             {$I+} или {$I-}
 Значение по умолчанию: {$I+}
 Тип:                   Локальная
 Команда меню:          Options|Compiler|I/O checking

Замечания: Если процедура ввода/вывода возвращает ненулевой результат ввода/вывода, когда переключатель $I включен, то программа завершается и выводится сообщение об ошибке времени выполнения. Если переключатель $I выключен, то вы должны использовать функцию IOResult для проверки ошибок ввода/вывода.


$K: Подпрограммы повторного вызова

Управляет порождением повторных вызовов для процедур и функций, экспортируемых приложением.

 Синтаксис:             {$K+} или {$K-}
 Значение по умолчанию: {$K+}
 Тип:                   Глобальная
 Команда меню:          Options|Compiler|Smart callbacks
 Режим:                 Windows

Замечания: Когда приложение компилируется в состоянии $K-, необходимо использовать подпрограммы API Windows MakeProcInstance и FreeProcInstance при создании подпрограмм повторного вызова. В состоянии $K+, нет необходимости использовать MakeProcInstance и FreeProcInstance.


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

Включает или выключает генерацию информации о локальных символах.

 Синтаксис:             {$L+} или {$L-}
 Значение по умолчанию: {$L+}
 Тип:                   Глобальная
 Команда меню:          Options|Compiler|Local symbols

Замечания: Информация о локальных символах состоит из:
:: Символов в части реализации модуля (имен и типов всех локальных переменных и констант модуля), и
:: Символов внутри процедур и функций модуля

Когда опция "Local symbols" включена, вы можете использовать автономный или интегрированный отладчик для проверки и изменения значений локальных переменных модуля или программы. Вызовы процедур и функции модуля могут быть исследованы через окно View|Stack или с помощью команды Debug|Call Stack. Опция Options|Linker|Map File производит информацию о локальных символах данного модуля только в том случае, если этот модуль компилировался в состоянии $L+. Для модулей, информация о локальных символах записывается в файл модуля вместе с объектным кодом модуля. Информация о локальных символах увеличивает размер файла модуля и занимает дополнительную область памяти при компиляции программ, использующих модуль. Она не влияет на размер или на быстродействие готовой программы.

Этот переключатель обычно используется совместно с переключателем отладочной информации $D.

ВНИМАНИЕ: директива $L игнорируется, если отладочная информация выключена {$D-}.


$N: Математический сопроцессор

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

 Синтаксис:             {$N+} или {$N-}
 Значение по умолчанию: {$N-}
 Тип:                   Глобальная
 Команда меню:          Options|Compiler|8087/80287

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

В состоянии $N+, компилятор генерирует код для выполнения всех вещественных вычислений с использованием математического сопроцессора 80x87 и дает вам доступ к четырем дополнительным вещественным типам: Single, Double, Extended и Comp.

ВНИМАНИЕ: Вы можете также использовать директиву $E+, чтобы эмулировать 80x87. Это дает вам доступ к вещественным типам при отсутствии 80x87 сопроцессора.


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

Включает и выключает генерацию оверлейного объектного кода.

 Синтаксис:             {$O+} или {$O-}
 Значение по умолчанию: {$O-}
 Тип:                   Глобальная
 Команда меню:          Options|Compiler|[X] Overlays allowed
 Режим:                 Real

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

ВНИМАНИЕ: директива компилятора {$O} почти всегда используется с директивой {$F+}, чтобы удовлетворить требованию дальнего (FAR) типа вызова менеджера верлеев.


$P: Открытые строковые параметры

Управляет значением переменных параметров, объявленных с использованием зарезервированного слова String.

 Синтаксис:             {$P+} или {$P-}
 Значение по умолчанию: {$P-}
 Тип:                   Глобальная
 Команда меню:          Options|Compiler|Open parameters

В состоянии $P-, переменные параметры, объявленные с помощью ключевого слова String являются нормальными переменными параметрами. Это обеспечивает совместимость с более ранними версиями Turbo Pascal.

В состоянии $P+, переменные параметры, объявленные с помощью ключевого слова String являются открытыми строковыми параметрами. Независимо от состояния директивы $P, для объявления открытых строковых параметров может использоваться идентификатор OpenString. Фактическим параметром открытого строкового параметра может быть переменная любого строкового типа, и, внутри процедуры или функции, атрибут максимальной длины формального параметра будет таким же, как и у фактического параметра.


$Q: Проверка переполнения

Управляет генерацией кода проверки переполнения.

 Синтаксис:             {$Q+} или {$Q-}
 Значение по умолчанию: {$Q-}
 Тип:                   Локальная
 Команда меню:          Options|Compiler|Overflow checking

В состоянии $Q+, некоторые целочисленные операции проверяются на переполнение, например: +, -, *, Abs, Sqr, Succ и Pred. Код для каждой из этих арифметических операций сопровождается дополнительным кодом, который проверяет, находится ли результат внутри обеспечиваемого диапазона. Если проверка переполнения не выдерживается, то программа завершается и выводится сообщение об ошибке времени выполнения.

Обратите внимание, что {$Q} не влияет на стандартные процедуры Inc и Dec. Эти процедуры никогда не проверяются на переполнение. Переключатель $Q обычно используется вместе с переключателем $R. Включение проверки переполнения замедляет вашу программу и делает ее больше, так что используйте {$Q+} только для отладки.

В состоянии $Q- проверка переполнения не производится.




Rambler's Top100 Rambler's Top100 MAFIA's Top100