ВНИМАНИЕ! Конкурс по программированию!
Проект Programmers.kz и школа hotPen3D2D предлагает Вам курсы по веб-дизайну, веб-программированию и компьютерной графике. Подробности здесь.
- Просмотров: 1150
- Автор: КазКиберГетик
Опции компилятора
Категория: Программирование » Pascal / Turbo Pascal » Уроки Pascal
Опции компилятора:
Опции компилятора: назначение
Каждое действие, описываемое любым оператором ЯП высокого уровня может быть реализовано множеством различных способов. Часть из них в любом случае не долна быть использована по причине неэффективности, а оставшиеся варианты следует избирать в различных ситуациях в зависимости от потребных параметров исполнимого кода.
Компилятор, разработанный фирмой Borland в большинстве случаев может сам определить какой исполнимый код генерировать, причем оптимизация (выбор используемого варианта) в большинстве случаев производится с точки зрения увеличения быстродействия исполнимого кода. Однако, существуют ситуации, когда компилятор не может автоматически определить какой из вариантов следует выбрать просто вследствие отсутствия информации. Например следует ли использовать инструкции 32-битных процессоров, проводить ли оптимизацию вычисления логических выражений и так далее.
В таких случаях программисту следует указать компилятору какие параметры кода его интересуют, то есть дать компилятору некоторые указания. Такого рода указания производятся за счет установки тех или иных опций компилятора. В зависимости от указанных опций компилятор будет производить те или иные действия при генерации исполнимого кода программы.
Все опции делятся на две большие группы: <!--msthemelist-->
| глобальные, сохраняющие свое значение на протяжении компиляции всего файла; <!--msthemelist--> | |
| локальные, имеющие возможность менять свое значение на этапах компиляции различных участков файла.<!--msthemelist--> |
Значение любой из опций компилятора можно установить двумя путями:
- указав напрямую компилятору <!--msthemelist-->
- непосредственно в компилируемом файле с помощью директив компилятора. Директивы глобальных опций должны быть указаны в начале файла (до начала компиляции).
| компилятору командной строки - через параметры; <!--msthemelist--> | |
| компилятору IDE - через диалоговое окно Options/Compiler;<!--msthemelist--> |
Компилятор командной строки в отсутствие параметров, указуюих на необходимое значение той или иной опции, считает его равным значению по умолчанию. Компилятор 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} | При включенной опции производится генерация отладочной информации о символах программы. |
Правильная установка опций на этапе написания/тестирования программы может оказать неоценимую помощь в этом процессе, позволяя автоматически отлавливать мелкие и крупные ошибки. После полной отладки, перед сдачей программы заказчику необходимо отключить опции, увеличивающие объем и время выполнения программы. И еще немного потестировать.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.




