Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Директивы компилятора. Условная компиляция.


Автор: Fedor 20.4.2005, 17:07
Директивы и символы условной компиляции
----------------------------------------
Условная компиляция основана на оценке условных символов.

Директива условного символа DEFINE
-----------------------------------
Определяет условный символ с заданным именем

 Синтаксис:
 {$DEFINE Имя}

Определенный символ существует до конца компиляции, или пока он не будет убран директивой $UNDEF Имя.
Директива {$DEFINE Имя} не даст эффекта, если символ с именем "Имя" уже был определен.

Условная директива компиляции ELSE
 -----------------------------------
Компилирует или пропускает исходный текст, следующий за директивой $ELSE.

 Синтаксис:
 {$ELSE}

Внутри исходного текста, разделенного директивами $IFDEF (или $IFNDEF) и $ENDIF, $ELSE компилирует текст, следующий за $ELSE, если условие $IFDEF (или $IFNDEF) не выполняется.
Если условие $IFDEF (или $IFNDEF) выполнено, то $ELSE игнорирует исходный текст, следующий за словом $ELSE.

Условная директива компиляции ENDIF
------------------------------------
Завершает блок условной компиляции, начинающийся с последней условной директивы $IFxxx.

 Синтаксис:
 {$ENDIF}

Условная директива компиляции IFDEF
------------------------------------
Компилирует текст, следующий за директивой IFDEF, если символ с именем "Имя" определен.

 Синтаксис:
 {$IFDEF Имя}

Условная директива компиляции IFNDEF
 -------------------------------------
Компилирует текст, следующий за директивой IFNDEF, если символ с именем "Имя" НЕ определен.

 Синтаксис:
 {$IFNDEF Имя}

Условная директива компиляции IFOPT
------------------------------------
Компилирует текст, следующий за директивой IFOPT, если заданный переключатель находится в определенном состоянии.

 Синтаксис:
 {$IFOPT Переключатель}

Параметр "Переключатель" включает имя переключателя, сопровождаемое знаком "+" или "-":
 "Переключатель+" означает, что переключатель включен
 "Переключатель-" означает, что переключатель выключен

Директива условного символа UNDEF
----------------------------------
Убирает предварительно определенный условный символ с именем "Имя"

 Синтаксис:
 {$UNDEF Имя}

Символ забывается до конца компиляции или пока он вновь не будет объявлен с помощью директивы $DEFINE.
Директива {$UNDEF Имя} не даст эффекта, если символ с именем "Имя" уже убран.

Символы условной компиляции
Символ     Значение
CPU86      Процессор принадлежит семье 80x86
CPU87      Присутствует ли сопроцессор 80x87 во время компиляции
DPMI       Указывает, что компиляция идет в защищенном режиме DOS
MSDOS      Указывает, что компиляция идет в реальном режиме DOS
VER70      Номер версии Turbo Pascal
WINDOWS    Указывает, что компиляция идет в среде Windows

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


 IF ... ENDIF:
Конструкция $IFxxx ... $ENDIF заставляет компилироваться исходный текст между $IFxxx и $ENDIF только в том случае, если условие, определенное в директиве $IFxxx истинно.
Если условие ложно, то исходный текст между двумя директивами игнорируется.


 IF ... ELSE ... ENDIF:
Конструкция $IFxxx ... $ELSE ... $ENDIF
заставляет компилироваться
 - Исходный текст между $IFxxx и $ELSE, если условие $IFxxx истинно,
 - Исходный текст между $ELSE и $ENDIF, если условие $IFxxx ложно.

Условные конструкции могут иметь 16 уровней вложений.

В каждом исходном файле должно быть равное количество директив $IFxxx и $ENDIF.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)