BUSCAR
INDICE
INDICE DEL TEMA
OBJETIVOS
TEORIA
PALABRAS RESERVADAS
GLOSARIO
EJERCICIOS
RESUELTOS
AUTOEVALUACION
PROPUESTOS
ERRORES
ESTADISTICAS
INICIO
FAQS
LINKS
RECOMIENDANOS
QUIENES SOMOS
MAPA DEL WEB
COLABORAR
Tema 17 El Preprocesador
Teoria: Directiva #ifdef e #ifndef

Estas directivas permiten comprobar si un identificador está o no actualmente definido, es decir, si un #define ha sido previamente procesado para el identificador y si sigue definido.

Sintaxis:

#ifdef     identifier
#ifndef   identifier

La línea:
#ifdef identificador
tiene exactamente el mismo efecto que
#if 1
si el identificador está actualmente definido, y el mismo efecto que
#if 0
si el identificador no está definido.


#ifndef compueba la no definición de un identificador, así la línea
#ifndef identificador
tiene el mismo efecto que
#if 0
si el identificador está definido, y el mismo efecto que
#if 1
si el identificador no está definido.

Por lo demás, la sintaxis es la misma que para #if, #elif, #else, y #endif.
Un identificador definido como nulo, se considera definido.

La definición es una propiedad importante de un identificador. Las directivas condicionales #ifdef e #ifndef se basan precisamente en esta propiedad de los identificadores. Esto ofrece un mecanismo muy potente para controlar muchos aspectos de la compilación.

Después de que una macro quede indefinida puede ser definida de nuevo con #define, usando la misma u otra definición.
Si se intenta definir un identificador de macro que ya esté definido, se producirá un aviso, un warning, si la definición no es exactamente la misma. Es preferible usar un mecanismo como este para detectar macros existentes:

            #ifndef NULL
            #define NULL 0L
            #endif

De éste modo, la línea del #define se ignorará si el símbolo NULL ya está definido.