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