2012-09-27 9 views
13

Also hier sind einige Makros ich erstellt haben:C: Erweitern Sie Makro mit Token Einfügen

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

Nach diesen Definitionen, würde ich die folgenden Erweiterungen gern geschehen:

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

Allerdings, wenn ich Fügen Sie die Token-Pasting-Operatoren hinzu, die Erweiterung von MODULE_NAME in MODULE_FUNCTION und MODULE_STRUCT findet nicht mehr statt ... Es scheint MODULE_NAME als eine literale Zeichenfolge zu betrachten, wenn Sie sie zusammenfügen.

Gibt es einen Weg um dies?

Antwort

15

In C sind die Operanden des Token-Pasting-Operators ## nicht expandiert.

Sie benötigen eine zweite Indirektionsstufe, um die Erweiterung zu erhalten.

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