2017-02-02 64 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