Разница между #ifdef и #ifndef в программировании заключается в том, что они выполняют условную компиляцию в зависимости от определённости или неопределённости символической константы. 1
Директива #ifdef проверяет, определён ли идентификатор. 2 Если да, то значение условия — «истина» (не ноль), в противном случае — «ложь» (0). 2
Директива #ifndef проверяет условие, противоположное условию #ifdef. 2 Если идентификатор не определён (или его определение удалено с помощью #undef), то условие — «истина», в противном случае — «ложь» (0). 2
Таким образом, основное различие в том, что #ifdef включает фрагмент кода, если макрос с указанным идентификатором определён выше по коду с помощью #define, а #ifndef — если не определён. 45