diretivas #ifdef e #ifndef (C/C++)

As diretivas de pré-processador #ifdef e #ifndef têm o mesmo efeito da diretiva #if quando usada com o operador defined.

Sintaxe

#ifdef identifier
#ifndef identifier

Essas diretivas são equivalentes a:

#if defined identifier
#if !defined identifier

Comentários

É possível usar as diretivas #ifdef e #ifndef em qualquer lugar onde #if possa ser usada. A instrução #ifdefidentifier é equivalente a #if 1 quando identifier tiver sido definida. Ela é equivalente a #if 0 quando identifier não tiver sido definida, ou tiver sido indefinida pela #undef diretiva. Essas políticas verificam somente a presença ou ausência de identificadores definidos com #define, não para identificadores declarados no código-fonte C ou C++.

Essas políticas são fornecidas somente para compatibilidade com versões anteriores da linguagem. A expressão de constante defined(identifier) usada com a diretiva #if é preferencial.

A diretiva #ifndef verifica o oposto da condição verificada por #ifdef. Se o identificador não foi definido (ou a definição foi removida com #undef), a condição é true (diferente de zero). Caso contrário, a condição será false (0).

Seção específica da Microsoft

O identificador pode ser passado da linha de comando usando a opção /D. Até 30 macros podem ser especificadas com /D.

A diretiva #ifdef é útil para verificar se uma definição existe, porque uma definição pode ser passada da linha de comando. Por exemplo:

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

Fim da seção específica da Microsoft

Confira também

Diretivas de pré-processador