I am working on a recursive macro. However, it seems that it is not expanded recursively. Here is a minimal working example to show what I mean:
// ignore input, do nothing #define ignore(...) // choose between 6 names, depending on arity #define choose(_1,_2,_3,_4,_5,_6,NAME,...) NAME // if more than one parameter is given to this macro, then execute f, otherwise ignore #define ifMore(f,...) choose(__VA_ARGS__,f,f,f,f,f,ignore)(__VA_ARGS__) // call recursively if there are more parameters #define recursive(first,args...) first:ifMore(recursive,args) recursive(a,b,c,d) // should print: a:b:c:d // prints: a:recursive(b,c,d) The recursive macro should expand itself recursively and always concatenate the result, separated with a colon. However, it doesn't work. The recursive macro is generated correctly (as can be seen on the result a:recursive(b,c,d) which includes a well-formed call to the macro again), but the generated recursive call ist not exanded.
Why is this the case and how can I get the behaviour I want?