Другой метод условной компиляции состоит в использовании директив #ifdef и #ifndef, что соответственно означает «если определено» и «если не определено». Стандартный вид #ifdef следующий:
#ifdef имя_макроса
последовательность операторов
#endif
Если имя макроса определено ранее в операторе #define, то последовательность операторов, стоящих между #ifdef и #endif, будет компилироваться. Стандартный вид #ifndef следующий:
#ifndef имя_макроса
последовательность операторов
#endif
Если имя макроса не определено ранее в операторе #define, то последовательность операторов, стоящих между #ifdef и #endif, будет компилироваться.
Kaк #ifdef, так и #ifndef могут использовать оператор #else, но нe #elif. Например:
#include <stdio.h>
#define TED 10
int main(void)
{
#ifdef TED
printf("Hi Ted\n");
#else
printf("Hi anyone\n");
#endif
#ifndef RALPH
printf("RALPH not defined\n");
#endif
return 0;
}
выводит «Hi Ted» и «RALPH not defined». Если TED не определен, то выведется «Hi anyone», a за ним «RALPH not defined».
#ifdef и #ifndef можно вкладывать друг в друга так же, как и #if.