2012-09-27 12 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_FUNCTIONとMODULE_STRUCT内でのMODULE_NAMEの展開はもう発生しません。MODULE_NAMEは、それらを貼り付ける際にリテラル文字列と見なされるようです。

方法はありますか?

答えて

15

トークンペースト演算子##のオペランドは展開されません。

拡張を取得するには、第2レベルの間接化が必要です。

#define CAT(x, y) CAT_(x, y) 
#define CAT_(x, y) x ## y 
関連する問題