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