2012-09-27 18 views
13

Así que aquí están algunas macros que he creado:C: Macro de expansión Con simbólico pegar

#define MODULE_NAME moduleName 
#define MODULE_STRUCT MODULE_NAME ## _struct 
#define MODULE_FUNCTION(name) MODULE_NAME ## _ ## name 

Después de esas definiciones, me gustaría que los siguientes expansiones a suceder:

MODULE_STRUCT --> moduleName_struct 
MODULE_FUNCTION(functionName) --> moduleName_functionName 

Sin embargo, cuando agregue los operadores de pegado de tokens, la expansión de MODULE_NAME dentro de MODULE_FUNCTION y MODULE_STRUCT ya no ocurre ... Parece considerar MODULE_NAME como una cadena literal al pegarlos juntos.

¿Hay una manera de evitar esto?

Respuesta

15

En C no se expanden los operandos del operador pegar contador ##.

Se necesita un segundo nivel de indirección para conseguir la expansión.

#define CAT(x, y) CAT_(x, y) 
#define CAT_(x, y) x ## y 
Cuestiones relacionadas