2014-01-26 84 views
1

我有一個函數func,它需要一個像PREFIX_XXXX這樣的常量作爲它的參數。此外,還有像#define a AAAA這樣的宏。是否可以編寫一個宏,當它被稱爲macro(a)時,將擴展爲func(PREFIX_AAAA)?我試過#define macro(x) func(PREFIX_##x),但當然這不會擴大aAAAA。我能想到的其他方式也沒有效果。C宏中參數的單個擴展

+0

@Barmar:但是當加入'#定義macro_(x)的FUNC(PREFIX _ ## X)'和'#定義的宏(X)macro_(x)的'我'錯誤:粘貼 「PREFIX_」 和 「(」在macro_沒有給出一個有效的預處理token'。 – aplavin

+0

聽起來像是你在宏定義的空間,如*#定義的宏(X)* ...而不是*#定義的宏(X)... * – cup

回答

2

粘貼##的參數不會進行宏觀擴展。因此,您需要另一個內宏,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) 

是,你是什麼之後?