|
Каждое действие, описываемое любым оператором
ЯП высокого уровня может быть реализовано
множеством различных способов. Часть из них
в любом случае не долна быть использована
по причине неэффективности, а оставшиеся
варианты следует избирать в различных ситуациях
в зависимости от потребных параметров
исполнимого кода.
Компилятор, разработанный фирмой Borland
в большинстве случаев может сам определить
какой исполнимый код генерировать, причем
оптимизация (выбор используемого варианта) в большинстве
случаев производится с точки зрения увеличения
быстродействия исполнимого кода. Однако,
существуют ситуации, когда компилятор
не может автоматически определить
какой из вариантов следует выбрать просто
вследствие отсутствия информации. Например
следует ли использовать инструкции 32-битных
процессоров, проводить ли оптимизацию
вычисления логических выражений и так далее.
В таких случаях программисту следует
указать компилятору какие параметры кода
его интересуют, то есть дать компилятору
некоторые указания. Такого рода указания
производятся за счет установки тех или
иных опций компилятора. В зависимости
от указанных опций компилятор будет
производить те или иные действия при
генерации исполнимого кода программы.
Все опции делятся на две большие группы:
- глобальные, сохраняющие
свое значение на протяжении компиляции всего файла;
- локальные, имеющие возможность
менять свое значение на этапах компиляции
различных участков файла.
Значение любой из опций компилятора можно
установить двумя путями:
- указав напрямую компилятору
- компилятору командной строки - через
параметры;
- компилятору IDE - через диалоговое окно
Options/Compiler;
- непосредственно в компилируемом файле с помощью
директив компилятора. Директивы глобальных
опций должны быть указаны в начале файла
(до начала компиляции).
Компилятор командной строки
в отсутствие параметров, указуюих на необходимое
значение той или иной опции, считает его равным
значению по умолчанию. Компилятор IDE
считает, что значения по умолчанию указаны в
соответствующем диалоговом окне (напомним, что
настройки IDE можно сохранять).
Наконец, вне зависимости от того, какие
опции указаны компилятору, если в файле встречаются
директивы. Поэтому для того, чтобы результат
компиляции программы не зависел от настроек
IDE (а они на разных машинах, естественно,
разные) следует указывать в каждом
компилируемом файле все нужные
директивы (сделать это можно два раза подряд
нажав Ctrl+o).
Рассмотрим наиболее интересные опции.
Каждая из них может быть включена директивой
{$@+} и отключена директивой
{$@-}, где @ -
одна из допустимых букв (см. таблицу)
{$A}
| При включении данной опции
производится выравнивание всех переменных
на границу слова, что ускоряет доступ к ним
и увеличивает объем требуемой памяти.
При отключенной
опции выравинвание не производится. |
{$B} |
При включенной опции генерируется код,
вычисляющий все компоненты логического
выражения (в том числе и вызовы функций).
При отключенной опции вычисления заканчиваются,
как только предопределен результат. |
{$D} |
При включенной опции компилятор генерирует
отладочную информацию и вставляет ее в файл.
Полезно на этапах отладки. Да и на этапе
предварительного использования тоже. Влияет
на размер программы и как следствие на скорость
загрузки. На скорость выполнения не влияет. |
{$E} |
При включенной опции компилятор
генерирует код, использующий сопроцессор,
если он есть, или эмуляцию сопроцессора
при его отсутствии дляобработки чисел с
плавающей точкой.
При отключенной опции генерируется только
код для сопроцессора, а эмулируюшие библиотеки не
включаются в исполнимый код. |
{$F} |
При включенной опции компилятор всегда
генерирует дальние (FAR) вызовы процедур
и функций.
При отключенной опции генерируются ближние
(NEAR) вызовы процедур, находящихся в одном
файле.
|
{$G} |
При включенной опции генерируется
код с использованием инструкций процессора
i80286. Проверка наличия такого процессора
не производится. |
{$I} |
При включенной опции генерируется
код, проверяющий правильность завершения
операций ввода-вывода и завершающий
программу при ошибке. См.
урок об этом. |
{$L} |
При включенной опции генерируется информация
об именах и типах локальных перемнных.
Эта информация может пригодиться при отладке.
На скорость выполнения не влияет. |
{$N} |
При включенной опции разрешена генерация
кода, использующего сопроцессор. |
{$O} |
При включенной опции генерируется
код, позволяющий правильно производить вызовы
перегружаемых модулей (оверлеев). |
{$Q} |
При включенной опции генерируется код,
проверяющий наличие перполнения при
выполнении некоторых арифметических операций.
При переполнении программа аварийно завершается.
Замедляет выполнение программы. Полезно для
поиска трудноуловимых ошибок.
|
{$R} |
При включенной опции генерируется код,
проверяющий правильность вычисленных
индексов массивов. При выходе за рамки
программа аварийно завершается. Замедляет
работу с массивами. Полезно на этапах
отладки. |
{$S} |
При включенной опции перед каждым
вызовом процедуры/функции генерируется
код для
проверки наличия достаточного места
в стеке под параметры/локальные переменные.
Полезно при отладке рекурсивных программ.
Замедляет работу. |
{$T} |
При включенной опции результат
операции @<переменная_типа_Е>
есть указатель на этот тип.
В противном случае тип результата этой операции -
pointer.
|
{$V} |
При включенной опции на этапе компиляции
производится сравнение размера строки,
передаваемой в качестве параметра с размером,
указанным при объявлениии параметра. При несовпадении
выдается ошибка.
При отключенной опции этого не происходит. |
{$X} |
При включенной опции разрешены выражения
расширенного синтаксиса языка
Object Pascal, к примеру вызов функции как
процедуры и тому подобные действия. Фактически
этот синтаксис уже стал стандартом de facto
в мире программрования. |
{$Y} |
При включенной опции производится
генерация отладочной информации о символах
программы. |
Правильная установка опций на этапе
написания/тестирования программы может
оказать неоценимую помощь в этом процессе,
позволяя автоматически отлавливать
мелкие и крупные ошибки. После полной
отладки, перед сдачей программы заказчику
необходимо отключить опции, увеличивающие
объем и время выполнения программы. И еще
немного потестировать.
|