簡體   English   中英

如何將宏的結果傳遞給另一個宏?

[英]How to pass a macro's result to another macro?

我的C代碼中有兩個宏可以幫助我編寫某些變量的名稱。 例如,請考慮以下事項:

#define MACROA(name) A_##name
#define MACROB(name) B_##name

void *MACROB(MACROA(object));

所以,我正在嘗試聲明一個名為B_A_object的變量。 但是,這不起作用,編譯器會拋出消息:

object.c:27:21: error: a parameter list without types is only allowed in a function definition
void *MACROB(MACROA(object));
                    ^
object.c:26:26: note: expanded from macro 'MACROB'
#define MACROB(name) B_##name
                         ^

因此,似乎預處理器沒有采用MACROA(object)的結果,但它正在考慮表達式本身,以便它嘗試制作B_MACROA(object) 那么,我需要做些什么才能讓預處理器考慮將宏的結果傳遞給另一個宏?

連接運算符很奇怪。 它首先連接並稍后評估:

void *MACROB(MACROA(object));  // The original line
void *B_MACROA(object);       // Becomes this, nothing more to expand

你可以這樣解決:

#define CONC(a,b) a ## b
#define MACROA(name) CONC(A_, name)
#define MACROB(name) CONC(B_, name)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM