Russian Belarusian English German Japanese Ukrainian

Rashka.studio - игры и приложения для Android! Заходи, ждём тебя =)

#if, #endif, #ifdef, #ifndef, #else, #elif

CuBook45

Условная компиляция дает возможность программисту управлять выполнением директив препроцессора и компиляцией программного кода. Каждая условная директива препроцессора вычисляет значение целочисленного константного выражения. Операции преобразования типов, операция sizeof и константы перечислимого типа не могут участвовать в выражениях, вычисляемых в директивах препроцессора.
 
Условная директива препроцессора #if во многом похожа на оператор if. Ее синтаксис имеет вид:
#if условие
фрагмент кода
#endif
В этой записи условие является целочисленным выражением. Если это выражение возвращает не нуль (истинно), то фрагмент кода, заключенный между директивой #if и директивой #endif, компилируется. Если же выражение возвращает нуль (ложно), то этот фрагмент игнорируется и препроцессором, и компилятором.
 
В условиях, помимо обычных выражений, можно использовать конструкцию defined идентификатор defined возвращает 1, если указанный идентификатор ранее был определен директивой #define, и возвращает 0 в противном случае. Например, возможен следующий код:
#if defined Debug && !defined MyConst
фрагмент кода
#endif
Фрагмент кода будет выполняться, если ранее была записана директива #define Debug и не было директивы #define MyConst или эта директива была отменена директивой #undef MyConst. Конструкция #if defined может быть заменена эквивалентной ей директивой #ifdef, а конструкция #if defined директивой #ifndef.
 
Можно использовать более сложные конструкции условных директив препроцессора при помощи директив #elif (эквивалент else if в обычной структуре if) и else (эквивалент else в структуре if). Например, в коде фрагмент кода 1 будет компилироваться, если выполняется условие 1, фрагмент кода 2 будет компилироваться, если выполняется условие 2, а фрагмент кода 3 будет компилироваться, если не выполняется ни одно из предыдущих условий:
#if условие 1
фрагмент кода 1
#elif условие 2
фрагмент кода 2
#else
фрагмент кода 3
#endif
Условная компиляция может быть полезна во многих случаях. Например, нередко в процессе отладки приложения в него полезно ввести различные отладочные печати, позволяющие следить за ходом выполнения программы. Если вы не хотите, чтобы эти печати оставались в окончательном варианте программы, вы можете в разных местах приложения ввести конструкции вида:
#ifdef Debug
операторы отладки
#endif
Тогда, если в начале программы вы введете директиву #define Debug операторы отладки будут компилироваться и выполняться. Но когда вы уберете или закомментируете эту директиву #define, определяющую введенный вами идентификатор Debug, все операторы отладки исчезнут из текста. Можно поступить даже проще, ничего не изменяя в тексте, а оперируя опцией Conditionals на странице Directories/Conditionals диалогового окна Project Options.
Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

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


Защитный код Обновить