Diretivas #ifdef e #ifndef (C/C++)
As políticas #ifdef e #ifndef executam a mesma tarefa da política #if quando usadas com defined( identifier ).
#ifdef identifier
#ifndef identifier
// equivalent to
#if defined identifier
#if !defined identifier
Comentários
É possível usar as políticas #ifdef e #ifndef em qualquer lugar que #if possa ser usado. A instrução #ifdef identifier é equivalente a #if 1 quando o identificador é definido e é equivalente a #if 0 quando o identificador não é definido ou se tiver sido indefinido com a política #undef. 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 política #if é preferencial.
A política #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).
Específico da Microsoft
O identificador pode ser passado da linha de comando usando a opção /D. Até 30 macros podem ser especificadas com /D.
Isso é útil para verificar se uma definição existe, uma vez que 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 de Específico da Microsoft