2017-02-02 66 views
1
// define 31: 
#define f_Q31(x)      f_Q(31,x) 
#define q31_F(x)      q_F(31,x) 
#define CHECK_Q31(q,def)    CHECK_Q(31,q,def) 
// define 25: 
#define f_Q25(x)      f_Q(25,x) 
#define q25_F(x)      q_F(25,x) 
#define CHECK_Q25(q,def)    CHECK_Q(25,q,def) 
// etc. 

#define`s可以在上述一概而論,像這樣:生成`從宏觀

#define SUPPORT_TYPE(N) something? 

添加一個新的類型,那麼將是一個行:

#define SUPPORT_TYPE_Q31 SUPPORT_TYPE(31) 
#define SUPPORT_TYPE_Q25 SUPPORT_TYPE(25) 
+4

預處理只做1通過,所以你必須找到另一種方式。 –

+0

爲什麼所有的宏觀魔法?內聯函數是否足夠? –

+0

@KamiKaze這是一個很長的故事... :-( – Danijel

回答

3

預處理只有一個通行證,所以你不能產生#define陳述與其他#define語句。

你可以使用一個小腳本(蟒蛇想到,竟然:))做你想要什麼:

text="""// define {0}: 
#define f_Q{0}(x)      f_Q({0},x) 
#define q{0}_F(x)      q_F({0},x) 
#define CHECK_Q{0}(q,def)    CHECK_Q({0},q,def) 
""" 

for i in (25,31): 
    print(text.format(i)) 

運行此腳本它生成時:

// define 25: 
#define f_Q25(x)      f_Q(25,x) 
#define q25_F(x)      q_F(25,x) 
#define CHECK_Q25(q,def)    CHECK_Q(25,q,def) 

// define 31: 
#define f_Q31(x)      f_Q(31,x) 
#define q31_F(x)      q_F(31,x) 
#define CHECK_Q31(q,def)    CHECK_Q(31,q,def) 
+2

同意。而且,@Danijel,如果你需要更多的腳手架,包括[我個人最喜歡的](https://stackoverflow.com/a/),有很多[更多選擇](https://stackoverflow.com/q/396644/2877364) 15027444/2877364):)。 – cxw