Как добавить два #define вместе в качестве ключевых слов в C?

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

#define TYPE uint32_t
#define ADDSUFFIX(x) xTHETYPE

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

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

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


person Galaxy    schedule 27.05.2011    source источник


Ответы (1)


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

#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) { }
person Random832    schedule 27.05.2011
comment
Вроде распространенная проблема. Я только что нашел stackoverflow.com/questions/1597007/ - person Galaxy; 27.05.2011
comment
Я хочу использовать gcc -D U32 -c x.c -o x32.o и gcc -D U64 -c x.c -o x64.o. И я думаю, что это должен быть способ подразумевать функции шаблона в C. - person Galaxy; 27.05.2011