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.
|