Операционная система UNIX. Руководство программиста

       

Условная компиляция


Командная строка вида

#if ограниченное_константное_выражение

проверяет, отлично ли от нуля значение ограниченного_константного_выражения. (Константные выражения обсуждаются в соответствующем разделе; здесь же накладываются следующие дополнительные ограничения: константное выражение не может содержать sizeof, операций явного преобразования типа и констант перечислимых типов.)

В ограниченное_константное_выражение может также входить дополнительная унарная операция

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

или

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

результат которой равен единице, если идентификатор в данный момент определен препроцессором, и нулю - если не определен.

В ограниченных_константных_выражениях все определенные в данный момент идентификаторы заменяются на соответствующие им цепочки лексем (за исключением идентификаторов - операндов defined) в точности так же, как и в обычном тексте. Ограниченное_константное_выражение будет обрабатываться только после того, как выполнятся все подстановки. Во время этой обработки все неопределенные к текущему моменту идентификаторы заменяются нулями.

Командная строка вида

#ifdef идентификатор

проверяет, определен ли в данный момент препроцессором указанный идентификатор, то есть был ли он задан при помощи директивы #define. Эта командная строка эквивалентна строке

#if defined(идентификатор)



Командная строка вида

#ifndef идентификатор

проверяет, что указанный идентификатор в данный момент не определен. Эта командная строка эквивалентна строке

#if !defined(идентификатор)

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

#else

Затем должна идти командная строка

#endif

Если проверяемое условие истинно, все строки, стоящие между #else и #endif, игнорируются. Если проверяемое условие ложно, игнорируются строки, стоящие между строкой, содержащей условие, и строкой с #else, а если ее нет - строкой с #endif.

Еще одна форма командной строки препроцессора:

#elif ограниченное_константное_выражение

Между командными строками #if (#ifdef, #ifndef) и #else

(#endif) может быть указано любое число строк #elif. Эти конструкции могут быть вложены.



Содержание раздела