#define IDENTIFIER sin un token

¿Qué significa la siguiente statement:

#define FAHAD 

Estoy familiarizado con las declaraciones como:

 #define FAHAD 1 

Pero, ¿qué significa la statement #define sin un token? ¿Es que es similar a una definición constante?

La definición de una constante sin un valor actúa como un indicador para el preprocesador, y se puede usar así:

 #define MY_FLAG #ifdef MY_FLAG /* If we defined MY_FLAG, we want this to be compiled */ #else /* We did not define MY_FLAG, we want this to be compiled instead */ #endif 

Cualquier #define resulta en reemplazar el identificador original con los tokens de reemplazo. Si no hay tokens de reemplazo, el reemplazo está vacío:

 #define DEF_A "some stuff" #define DEF_B 42 #define DEF_C printf("%s is %d\n", DEF_A, DEF_B DEF_C); 

se expande a:

 printf("%s is %d\n", "some stuff", 42 ); 

Puse un espacio entre 42 y ) para indicar la “nada” a la que se expandió DEF_C , pero al menos en términos de lenguaje, la salida del preprocesador es simplemente una secuencia de tokens. (Los comstackdores reales generalmente le permiten ver la salida del preprocesador. El hecho de que haya espacios en blanco aquí depende del preprocesador real. Para GNU cpp, hay uno).

Como en las otras respuestas hasta el momento, puede usar #ifdef para probar si un identificador ha sido #define d. También puedes escribir:

 #if defined(DEF_C) 

por ejemplo. Estas pruebas son positivas (es decir, el identificador está definido) incluso si la expansión está vacía.

significa que FAHAD está definido, luego puede verificar si está definido o no con:

 #ifdef FAHAD //do something #else //something else #endif 

O:

 #ifndef FAHAD //if not defined //do something #endif 

Un ejemplo de uso de la vida real es verificar si una función o un encabezado está disponible para su plataforma, por lo general, un sistema de comstackción definirá macros para indicar que existen algunas funciones o encabezados antes de comstackr realmente, por ejemplo, esto verifica si signal.h está disponible:

 #ifdef HAVE_SIGNAL_H # include  #endif/*HAVE_SIGNAL_H*/ 

Esto comprueba si alguna función está disponible

 #ifdef HAVE_SOME_FUNCTION //use this function #else //else use another one #endif 
 #define FAHAD 

Esto actuará como un indicador de comstackdor, bajo el cual se puede hacer algo de código. esto le indicará al comstackdor que compile el código presente en esta opción del comstackdor

 #ifdef FAHAD printf(); #else /* NA */ #endif