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.

Can the above be generalized, like so:

#define SUPPORT_TYPE(N) something?

Adding a new type would then be a one line:

#define SUPPORT_TYPE_Q31   SUPPORT_TYPE(31)
#define SUPPORT_TYPE_Q25   SUPPORT_TYPE(25)
Quentin
  • 62,093
  • 7
  • 131
  • 191
Danijel
  • 8,198
  • 18
  • 69
  • 133

1 Answers1

3

Preprocessor only has one pass, so you cannot generate #define statements with other #define statements.

You could use a small script (python comes to mind, surprisingly :)) to do what you want:

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))

when running this script it generates:

// 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)
Jean-François Fabre
  • 137,073
  • 23
  • 153
  • 219
  • 2
    Agreed. And, @Danijel, there are lots [more alternatives](https://stackoverflow.com/q/396644/2877364) if you need more scaffolding, including [my personal favorite](https://stackoverflow.com/a/15027444/2877364) :) . – cxw Feb 02 '17 at 13:48