The #ifdef and #ifndef Directives

The #ifdef and #ifndef directives perform the same task as the #if directive when it is used with defined(identifier).

Syntax

#ifdefidentifier

#ifndefidentifier

is equivalent to

#if definedidentifier

#if !definedidentifier

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, and is equivalent to #if 0 when identifier has not been defined or has been undefined with the #undef directive. These directives check only for the presence or absence of identifiers defined with #define, not for identifiers declared in the 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 has not been defined (or 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.

This is useful for checking if a definition exists since a definition can be passed from the command line. For example:

// PROG.CPP

#ifndef test // These three statements go in your source code.

#define final

#endif

CL /Dtest prog.cpp // This is the command for compilation.¨