2011-05-27 49 views
1

我想要做的事,如:如何在C中追加兩個#define作爲關鍵字?

#define TYPE uint32_t 
#define ADDSUFFIX(x) xTHETYPE 

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

,我需要得到uint32_t getvalueuint32_t (uint32_t * pMem) {}要看是什麼類型。

如何使這項工作?

+0

http://stackoverflow.com/questions/5459868/c-預處理器 - 連接字符串到字符串 – 2011-05-27 01:40:28

回答

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) { } 
+0

這似乎是一個常見問題。我剛剛找到http://stackoverflow.com/questions/1597007/creating-c-macro-with-and-line-token-concatenation-with-positioning-macro – Galaxy 2011-05-27 02:00:50

+0

我想用'gcc -D U32 -c xc - o x32.o'和'gcc -D U64 -c xc -o x64.o'。我認爲這應該是一種暗示C中模板函數的方式 – Galaxy 2011-05-27 02:15:05

相關問題