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


Директивы #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

См. также

Ссылки

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