Delphi. Условная компиляция. Краткий справочник

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

Первый способ:

В этой реализации условная директива {$IFDEF …} проверяет, был ли определён указанный в ней символ условной компиляции. Если да, то код программы между директивами {$IFDEF …} и {$ENDIF} компилируется. В противном случае, код между этими двумя директивами компилироваться не будет.

Второй способ:

Эта реализация отличается от предыдущей наличием директивы {$ELSE}. В этом случае, если условный оператор определён, будет компилироваться код программы между директивами {$IFDEF} и {$ELSE}. В противном случае, будет компилироваться код программы между директивами {$ELSE} и {$ENDIF}.

По сути, первая и вторая реализации ведут себя как краткая и полная форма обычного условного оператора if.

Как определить символ условной компиляции? Для этого также существует два способа.

Первый – использование директивы {$DEFINE}

Второй способ. Определить его в свойствах проекта. Для этого в меню Project нужно выбрать пункт Options и в поле Conditional defines ввести символ условной компиляции.

Определение символа условной компиляции

Третий и четвёртый способы являются аналогией первого и второго соответственно. Отличие в том, что используется условная директива {$IFNDEF}. Эта директива проверяет, что указанный символ не определён. То есть, является прямой противоположностью директивы {$IFDEF}.

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

В Delphi уже имеется ряд символов условной компиляции. Вот их «классический» набор.

Символ условной компиляции Значение
MSWINDOWS Код компилируется только в ОС Windows
WIN32 То же самое, только код компилируется лишь для 32-разядной ОС.
LINUX Был введён в Delphi 6 вместе с MSWINDOWS для определения платформы, для которой необходимо компилировать тот или иной код.Так как компиляция для Linux в Delphi до сих пор отсутствует, то использование этого символа в программах не имеет смысла.
CONSOLE Консольное приложение
CPU386 Компиляция для процессоров типа i386 или более современных. Так как речь идёт о процессорах типа i386, использование данного символа уже давно потеряло актуальность.
CONDITIONAL EXPRESSIONS Проверяет использование директив $IF

Также в число «классических» входит и символ VERxxx, который указывает конкретную версию компилятора. По сути, это целое семейство символов условной компиляции, в которое с выходом новой версии Delphi добавляется новый символ соответствующий этой версии. Ниже представлена таблица соответствия версий Delphi символам условной компиляции VERxxx (материал взят с Исходники.ру).

 

Версия Delphi Символ условной компиляции
1 VER80
2 VER90
3 VER100
4 VER120
5 VER130
6 VER140
7 VER150
8 VER160
2005 VER170
2006 VER180
2007* VER180 или VER185
2009 VER200
2010 VER210
XE VER220
XE2 VER230
XE3 VER240
XE4 VER250
XE5 VER260
XE6 VER270
XE7 VER280
XE8 VER290
10 Seatle VER300
10.1 Berlin VER310
10.2 Tokyo VER320

 

*-версии 2006 и 2007 совместимы между собой на уровне двоичного кода. Поэтому, для поддержки обеих версий следует использовать символ VER180. Если необходима поддержка только версии 2007, необходимо использовать символ VER185.

После выхода в 2011 году кроссплатформенной библиотеки FireMonkey, были введены новые символы условной компиляции для MacOS и iOS. А, в 2013 году с появлением поддержки Android был введён и специальный символ условной компиляции для этой ОС. Ниже представлен перечень этих символов.

 

Платформа Символ условной компиляции
MacOS MACOS
iOS IOS
Android ANDROID

Условная компиляция на примере кроссплатформенного приложения:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *