¿Qué hacen los operadores # y ## en C?

algo como #NAME o ## NAME. ¿Qué significan en C? Los vi en documentos de GCC sobre macro.

el operador ## concatena dos argumentos sin dejar espacios en blanco entre ellos.

#define printe(a,b) a ## b printe(c,out) << "testing"; 

la salida es: prueba

y # solo se utiliza para la sustitución de parámetros dentro del parámetro de cadena como

 #define st(x) #x cout< 

y # también es una directiva de preprocesador ..

Una statement de código que comienza con # indica que lo que sigue es una directiva de preprocesador y debe ser expandido por el preprocesador.

## se llama macro de concatenación de token peging o token .

De la página de wikipedia que describe el preprocesador de C :

El operador ## concatena dos tokens en un token, como en este ejemplo:

 #define DECLARE_STRUCT_TYPE(name) typedef struct name##_s name##_t DECLARE_STRUCT_TYPE(g_object); // Outputs typedef struct g_object_s g_object_t; 

El operador # señala otras directivas al preprocesador de C, por ejemplo: #include, #define, #undef, #error, #if, #ifdef, #ifndef, #else, #elif, #endif

El ‘#’ realmente no es un operador, son directivas de preprocesador, y el ‘##’ se usa solo para definiciones de macro de funciones.


Hay muchas directivas de preprocesador en C:

Para las definiciones de macros hay:

 #define #undef 

Para las inclusiones condicionales, hay:

 #ifdef #ifndef #if #endif #else #elif 

Para el Control de Línea, hay:

 #line 

Por error, hay:

 #error 

Para la inclusión de archivos de origen, hay:

 #include 

Para la directiva Pragma, hay:

 #pragma 

Para obtener más información, lea este http://www.cplusplus.com/doc/tutorial/preprocessor/