Поделиться через


#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

Завершение блока, относящегося только к системам Майкрософт

См. также

Директивы препроцессора