2010-05-27 184 views
0

可能重複:
C, Macro defining Macro宏定義宏

有誰知道怎麼決絕這樣的事情...

我有很多重複的宏作爲: -

#define MYMACRO1(x)   Do1(x) 
#define MYMACRO2(x,y)  Do2(x, y) 
#define MYNEXTMACRO1(x)  Do1(x) 
#define MYNEXTMACRO2(x,y) Do2(x, y) 

上面的代碼工作正常,但我想寫一個宏來創建宏(一個元宏)。

例如: -

#define MYMETAMACRO(name) \ 
#define #name1(x)  Do1(x) \ 
#define #name2(x,y) Do2(x, y) \ 

,這樣我可以做到: -

MYMETAMACRO(MYMACRO); 
MYMETAMACRO(MYNEXTMACRO); 

,然後: -

MYMACRO1(2); 
MYMACRO2(2,3); 
MYNEXTMACRO1(4); 
MYNEXTMACRO2(4, 5); 

#define預處理炸彈出來,因爲它認爲它是宏的缺失參數。

+1

不與c預處理器一起工作只是讓你渴望lisp? – Stephen 2010-05-27 02:07:00

+0

其他問題的答案在技術上可能是正確的,但我不認爲它們是完整的,所以我不會投票結束。 – WhirlWind 2010-05-27 02:12:31

+1

@Whirlwind:你*可以*總是添加一個新的,更完整的答案給另一個問題... – sth 2010-05-27 02:16:34

回答

2

據我所知,你不能寫一個宏,在C/C++寫的另一個宏。

我已經花了足夠的時間去嘗試使用C++中的C預處理器來做類似的事情,並且問過周圍的人,並得出結論認爲這是不可能的。

1

您不能在其他宏中定義宏,但可以從宏調用宏,這可以獲得基本相同的結果。

#define B(x) do {printf("%d", (x)) }while(0) 
#define A(x) B(x) 

因此,A(y)擴大到do {printf("%d", (y)) }while(0)