Директивы #ifdef и #ifndef (C/C++)
Директивы #ifdef и #ifndef выполняют ту же задачу, что и директива #if, если она используется с ключевым словом defined( идентификатор ).
#ifdef identifier
#ifndef identifier
// equivalent to
#if defined identifier
#if !defined identifier
Заметки
Директивы #ifdef и #ifndef можно использовать в любом месте, в котором может использоваться директива #if. Если параметр идентификатор был определен, то оператор #ifdef идентификатор эквивалентен оператору #if 1 . Если же параметр идентификатор не был определен или его определение отменено при помощи директивы #undef, то он эквивалентен оператору #if 0 . Эти директивы проверяют наличие или отсутствие только идентификаторов, определенных с директивой #define, а не идентификаторов, объявленных в исходном коде C или C++.
Эти директивы предназначены только для совместимости с предыдущими версиями языка. Предпочтительнее использовать константное выражение defined( идентификатор ) с директивой #if.
Директива #ifndef проверяет противоположность условия, проверяемого директивой #ifdef. Если идентификатор не определен (или его определение было удалено директивой #undef), то условие выполняется (true, ненулевое значение). В противном случае условие не выполняется (false, значение равно 0).
Блок, относящийся только к системам Microsoft
Значение идентификатора можно передать из командной строки при помощи параметра /D. Он позволяет определить до 30 макросов.
Это позволяет проверить, существует ли определение, поскольку определения можно передавать из командной строки. Например:
// ifdef_ifndef.CPP
// compile with: /Dtest /c
#ifndef test
#define final
#endif
Завершение блока, относящегося только к системам Microsoft