довідник c

Довідник по C / C ++

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

Директиви #if, #ifdef, #ifndef, #else, #elif і #endif використовуються для виборчої компіляції різних фрагментів програми. Головна ідея полягає в тому, що якщо вираз, що стоїть після директив #if, #ifdef і #ifndef, виявляється істинним, то буде скомпільовано код, розташований між однією з цих трьох директив і директивою #endif; в іншому випадку даний код буде опущений. Директива #endif використовується для позначення кінця блоку #if. Директиву #else можна використовувати з будь-якою з перерахованих вище директив для надання альтернативного варіанту компіляції.

Загальна форма запису директиви #if виглядає так.

Якщо константний вираз є істинним, буде скомпільовано код, розташований безпосередньо за цією директивою.

Загальна форма запису директиви #ifdef така.

Якщо імя_макроса визначено в операторі #define, то буде скомпільовано блок коду, наступний за оператором #ifdef.

Загальна форма запису директиви #ifndef така.

Якщо імя_макроса не визначене в операторі #define, то буде скомпільовано блок коду, наступний за оператором #ifndef.

Ось приклад спільної роботи деяких директив препроцесора.

В результаті виконання цього фрагмента програми на екран будуть виведені фрази "Привіт", "Тед" і "Привіт, Джон", а фраза "Привіт, Жорж" - немає.

Директива #elif використовується для створення оператора if-else-if. Його загальна форма має такий вигляд.

Для обробки відразу декількох альтернатив можна використовувати ряд директив # е1if.

За допомогою директив #if і #elif і оператора предпроцессорной обробки defined можна також з'ясувати, чи визначено ім'я конкретного макросу директивою препроцесора define. Для цього використовується наступна загальна форма запису.

Якщо імя_макроса визначено, последовательность_операторов буде скомпільована. В іншому випадку вона буде опущена. Наприклад, в наступному фрагменті умовний оператор компілюється, оскільки ім'я макросу DEBUG визначено в програмі.

Можна також оператор defined випередити оператором заперечення (!), І тоді умовна компіляція буде виконана в разі, якщо задане ім'я макросу не визначене.

Схожі статті