double arrow

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

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

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

#if условие фрагмент кода#endif

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

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

defined возвращает 1, если указанный идентификатор был определён директивой #define, или 0 в противном случае. Конструкций #if defined может быть заменена эквивалентной ей директивой #ifdef, а конструкция #if!defined – директивой #ifndef.

Можно использовать более сложные конструкции условных директив препроцессора при помощи директив #elif (эквивалентно else if в обычной структуре if) и #else. Условная компиляция может быть полезна во многих случаях: нередко в процессе отладки приложения в него полезно ввести различные отладочные метки, позволяющие следить за ходом выполнения работы. Также условная компиляция позволяет исключить зацикливание при циклических директивах #include, включающих в различных модулях заголовочные файлы друг друга.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



Сейчас читают про: