#ifdef and #ifndef directives (C/C++)

The #ifdef and #ifndef preprocessor directives have the same effect as the #if directive when it's used with the defined operator.

Syntax

#ifdef identifier
#ifndef identifier

These directives are equivalent to:

#if defined identifier
#if !defined identifier

Remarks

You can use the #ifdef and #ifndef directives anywhere #if can be used. The #ifdef identifier statement is equivalent to #if 1 when identifier has been defined. It's equivalent to #if 0 when identifier hasn't been defined, or has been undefined by the #undef directive. These directives check only for the presence or absence of identifiers defined with #define, not for identifiers declared in the C or C++ source code.

These directives are provided only for compatibility with previous versions of the language. The defined( identifier ) constant expression used with the #if directive is preferred.

The #ifndef directive checks for the opposite of the condition checked by #ifdef. If the identifier hasn't been defined, or if its definition has been removed with #undef, the condition is true (nonzero). Otherwise, the condition is false (0).

Microsoft Specific

The identifier can be passed from the command line using the /D option. Up to 30 macros can be specified with /D.

The #ifdef directive is useful for checking whether a definition exists, because a definition can be passed from the command line. For example:

// ifdef_ifndef.CPP
// compile with: /Dtest /c
#ifndef test
#define final
#endif

END Microsoft Specific

See also

Preprocessor directives