TURBO PASCAL

Новости

Программы   

Turbo Pascal 

Игры

Документация   

Странности

FAQ

Ссылки

Форум

Гостевая книга

Рассылка

Благодарности

Об авторе

 

 

Опции компилятора:

зачем нужны и на что влияют.

 

Опции компилятора: назначение

 

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

Компилятор, разработанный фирмой Borland в большинстве случаев может сам определить какой исполнимый код генерировать, причем оптимизация (выбор используемого варианта) в большинстве случаев производится с точки зрения увеличения быстродействия исполнимого кода. Однако, существуют ситуации, когда компилятор не может автоматически определить какой из вариантов следует выбрать просто вследствие отсутствия информации. Например следует ли использовать инструкции 32-битных процессоров, проводить ли оптимизацию вычисления логических выражений и так далее.

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

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

 

Значение любой из опций компилятора можно установить двумя путями:

  1. указав напрямую компилятору
    компилятору командной строки - через параметры;
    компилятору IDE - через диалоговое окно Options/Compiler;
  2. непосредственно в компилируемом файле с помощью директив компилятора. Директивы глобальных опций должны быть указаны в начале файла (до начала компиляции).

 

Компилятор командной строки в отсутствие параметров, указуюих на необходимое значение той или иной опции, считает его равным значению по умолчанию. Компилятор 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} При включенной опции производится генерация отладочной информации о символах программы.

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

 

На первую страницу

Rambler's Top100 Rambler's Top100
PROext: Top 1000

(с)Все права защищены

По всем интересующим вопросам прошу писать на электронный адрес

Hosted by uCoz