2012-09-27 54 views
13

因此,這裏有一些宏,我創建:C:擴展宏標記粘貼

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

這些定義後,我想下面的擴展情況發生:

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

然而,當我添加令牌粘貼操作符,MODULE_NAME在MODULE_FUNCTION和MODULE_STRUCT中的擴展不再發生......當將它們粘貼在一起時,它似乎認爲MODULE_NAME是一個字符串。

有沒有辦法解決這個問題?

回答

15

在C中,令牌粘貼操作符##的操作數未擴展。

您需要第二級間接獲取擴展。

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