4.7.3. Las directivas del preprocesador #define, #ifndef y #endif

La directiva de preprocesador #define se puede usar para crear banderas en tiempo de compilación. Tiene dos opciones: puede simplemente indicar al preprocesador que la bandera está definida, sin especificar un valor:

#define FLAG

o puede darle un valor (que es la manera habitual en C para definir una constante):

#define PI 3.14159

En cualquier caso, ahora el preprocesador puede comprobar si la etiqueta ha sido definida:

#ifdef FLAG

Esto producirá un resultado verdadero, y el código que sigue al #ifdef se incluirá en el paquete que se envía al compilador. Esta inclusión acaba cuando el preprocesador encuentra la sentencia:

#endif

o

#endif // FLAG

Cualquier cosa después de #endif en la misma línea que no sea un comentario es ilegal, incluso aunque algunos compiladores lo acepten. Los pares #ifdef/#endif se pueden anidar.

El complementario de #define es #undef (abreviación de «un-define» que hará que una sentencia #ifdef que use la misma variable produzca un resultado falso. #undef también causará que el preprocesador deje de usar una macro. El complementario de #ifdef es #ifndef, que producirá verdadero si la etiqueta no ha sido definida (éste es el que usaremos en los ficheros de cabecera).

Hay otras características útiles en el preprocesador de C. Consulte la documentación de su preprocesador para ver todas ellas.