如何将两个#define作为关键字附加在C中?

时间:2011-05-27 01:38:30

标签: c c-preprocessor

我想做类似的事情:

#define TYPE uint32_t
#define ADDSUFFIX(x) xTHETYPE

THETYPE * ADDSUFFIX(getvalue) (THETYPE * pMem) {}

我需要获得uint32_t getvalueuint32_t (uint32_t * pMem) {}取决于TYPE是什么。

如何使这项工作?

1 个答案:

答案 0 :(得分:2)

您需要“令牌粘贴”操作符,但当其中一个操作数是参数或宏时,它会变得棘手。这对我有用:

#define THETYPE uint32_t
#define ADDSUFFIX_2(x,y) x ## y
#define ADDSUFFIX_1(x,y) ADDSUFFIX_2(x,y)
#define ADDSUFFIX(x) ADDSUFFIX_1(x,THETYPE)

THETYPE * ADDSUFFIX(getvalue) (THETYPE * pMem) {}

如果你想要getvalue_uint32_t,这可行:

#define ADDSUFFIX(x) ADDSUFFIX_1(x ## _,THETYPE)

还要考虑:

#define MKFUNC(type,func,param) \
type * ADDSUFFIX_1(func ## _,type) (type * param)
MKFUNC(uint32_t,getvalue,pMem) { }