私は再帰的マクロを扱っています。しかし、再帰的には展開されていないようです。ここで私が何を意味するか示すために、最小限の作業例です:再帰Cマクロは展開されていません
// 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)
recursive
マクロが再帰的に自分自身を拡張し、常にコロンで区切られた結果を、連結すべきです。ただし、動作しません。再帰マクロは正しく生成されます(結果はa:recursive(b,c,d)
ですが、マクロへの正常な呼び出しが含まれます)。しかし、生成された再帰呼び出しは除外されません。
なぜこれが当てはまるのですが、なぜ私が望む動作を得ることができますか?
「私は、再帰的なマクロに取り組んでいます」 - まあ、それは知ることは困難です何を言いたいのですか:(非再帰マクロはPITAです –