Как добавить два #define вместе как ключевые слова в C? - PullRequest
1 голос
/ 27 мая 2011

Я хочу сделать что-то вроде:

#define TYPE uint32_t
#define ADDSUFFIX(x) xTHETYPE

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

И мне нужно получить uint32_t getvalueuint32_t (uint32_t * pMem) {} зависит от того, что ТИП.

Как заставить эту работу работать?

1 Ответ

2 голосов
/ 27 мая 2011

Требуется оператор «вставка токена», но он может оказаться сложным, когда один из операндов является параметром или макросом.Это сработало для меня:

#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) { }
...