Справочные данные по языку C++____________________________611

11.2.3 Условная компиляция: директивы #if, #endif, #ifdef,
ftifndef. #else, #elif

Условная компиляция дает возможность программисту управлять выполнени-
ем директив препроцессора и компиляцией программного кода. Каждая условная
лректива препроцессора вычисляет значение целочисленного константного выра-
жения. Операции преобразования типов, операция sizeof и константы перечисли-
;ого типа не могут участвовать в выражениях, вычисляемых в директивах пре-
процессора.

Условная директива препроцессора #if во многом похожа на оператор if. Ее
:интаксис имеет вид:

ttif условие

фрагмент кода
ttendif

В этой записи условие является целочисленным выражением. Если это выра-
жение возвращает не нуль (истинно), то фрагмент кода, заключенный между ди-
рективой #if и директивой #endif компилируется. Если же выражение возвращает
нуль (ложно), то этот фрагмент игнорируется и препроцессором, и компилятором.

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

defined идентификатор

defined возвращает 1, если ранее указанный идентификатор был определен дирек-
тивой #define, и возвращает 0 в противном случае. Например, возможен следую-
щий код:

ttif defined Debug && [defined MyConst

фрагмент кода
ftendif

Фрагмент кода будет выполняться, если ранее была записана директива

((define Debug
и не было директивы

ttdefine MyConst
или эта директива была отменена директивой

ftundef MyConst

Конструкция #if defined может быть заменена эквивалентной ей директивой
tifdef, а конструкция #if ! defined — директивой #ifndef. Например, тексты

ttifdef Size
ftendif

Undefined Size
ttendif

Эквивалентны.

I Можно использовать более сложные конструкции условных директив препро-
цессора при помощи директив #elif (эквивалент else if в обычной структуре if) и
|ttelse (эквивалент else в структуре if). Например, в коде

ttif условие 1

фрагмент кода 1
ftelif условие 2

фрагмент кода 2

20'