1
我有一個函數func
,它需要一個像PREFIX_XXXX
這樣的常量作爲它的參數。此外,還有像#define a AAAA
這樣的宏。是否可以編寫一個宏,當它被稱爲macro(a)
時,將擴展爲func(PREFIX_AAAA)
?我試過#define macro(x) func(PREFIX_##x)
,但當然這不會擴大a
到AAAA
。我能想到的其他方式也沒有效果。C宏中參數的單個擴展
我有一個函數func
,它需要一個像PREFIX_XXXX
這樣的常量作爲它的參數。此外,還有像#define a AAAA
這樣的宏。是否可以編寫一個宏,當它被稱爲macro(a)
時,將擴展爲func(PREFIX_AAAA)
?我試過#define macro(x) func(PREFIX_##x)
,但當然這不會擴大a
到AAAA
。我能想到的其他方式也沒有效果。C宏中參數的單個擴展
粘貼##
的參數不會進行宏觀擴展。因此,您需要另一個內宏,e.g:
#define CONCAT(a,b) a ## b
#define MACRO(x) func(CONCAT(PREFIX_,x))
MACRO(TEST)
要進行測試,運行gcc -E
以上,你會得到:
# 1 "macro.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "macro.c"
func(PREFIX_TEST)
是,你是什麼之後?
@Barmar:但是當加入'#定義macro_(x)的FUNC(PREFIX _ ## X)'和'#定義的宏(X)macro_(x)的'我'錯誤:粘貼 「PREFIX_」 和 「(」在macro_沒有給出一個有效的預處理token'。 – aplavin
聽起來像是你在宏定義的空間,如*#定義的宏(X)* ...而不是*#定義的宏(X)... * – cup