Кроме применения #ifdef, есть еще второй способ узнать, определено ли имя макроса. Можно использовать директиву #if в сочетании с оператором времени компиляции defined. В общем виде оператор defined выглядит таким образом:
defined имя_макроса
Если имя_макроса определено, то выражение считается истинным; в противном случае — ложным. Например, чтобы узнать, определено ли имя макроса MYFILE, можно использовать одну из двух команд препроцессора:
#if defined MYFILE
или
#ifdef MYFILE
Можно также задать противоположное условие, поставив ! прямо перед defined. Например, следующий фрагмент компилируется только тогда, когда имя макроса DEBUG не определено:
#if !defined DEBUG
printf("Окончательная версия!\n");
#endif
Единственная причина, по которой используется оператор defined, состоит в том, что с его помощью в #elif можно узнать, определено ли имя макроса.