11.4  Директивы #ifdef и #ifndef

Директивы #ifdef и #ifndef выполняют те же функции, что и директива #if defined (идентификатор). Директивы #ifdef и #ifndef можно использовать везде, где допустимо использование директивы #if. Эти директивы реализованы только для обеспечения совместимости с предыдущими версиями языка. Предпочтительно использовать постоянное выражение defined(идентификатор) с директивой #if.

Синтаксис директив #ifdef и #ifndef следующий:  

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

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

Когда препроцессор обнаруживает директиву #ifdef, он проверяет, определен ли идентификатор. Если он определен, то значение условия "истина" (не ноль), а если он неопределен, то значение условия "ложь" (0). Директива #ifndef проверяет условие, противоположное условию #ifdef. Если идентификатор неопределен (или его определение удалено с помощью #undef), то условие "истина", и условие "ложь" (0) в противном случае.