动态变量名称:连接宏定义文本

时间:2014-12-01 05:02:06

标签: c c-preprocessor

是否可以使用常规文本加入宏定义?

例如;

#define T_NAME      Text_Int       
#define MAP_KEYS    T_NAME _Map_Keys      // defined in a separate header file "a.h"

// I am hoping MAP_KEYS = Text_Int_Map_Keys

所以我可以去:

#undef T_NAME
#undef MAP_KEYS
#define T_NAME      Text_Real       
#define MAP_KEYS    T_NAME _Map_Keys

#undef T_NAME
#undef MAP_KEYS
#define T_NAME      Text_Short       
#define MAP_KEYS    T_NAME _Map_Keys

1 个答案:

答案 0 :(得分:3)

使用CAT宏:

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

#define T_NAME      Text_Int 
#define MAP_KEYS    CAT(T_NAME, _MAP_KEYS)

然后

MAP_KEYS

将扩展为Text_Int_Map_Keys

需要间接,因为##的普通操作数在粘贴之前不会展开。