关于宏参数的Foreach宏

我想知道是否有可能在宏参数上编写宏foreach。这是要执行的操作:


#define PRINT(a) printf(#a": %d", a)

#define PRINT_ALL(...) ? ? ? THE PROBLEM ? ? ? 

以及可能的用法:


int a = 1, b = 3, d = 0;

PRINT_ALL(a,b,d);

这是我到目前为止所取得的成就


#define FIRST_ARG(arg,...) arg

#define AFTER_FIRST_ARG(arg,...) , ##__VA_ARGS__     

#define PRINT(a) printf(#a": %d", a)

#define PRINT_ALL PRINT(FIRST_ARG(__VA_ARGS__)); PRINT_ALL(AFTER_FIRST_ARG(__VA_ARGS__))

这是一个递归宏,这是非法的。另一个问题是stop condition递归。


蝴蝶刀刀
浏览 600回答 3
3回答

回首忆惘然

由于您接受预处理器具有VA_ARGS(在C99中,但在当前的C ++标准中不是),因此可以使用P99。它正是您要的:P99_FOR。它不需要()()()BOOST 的粗略语法就可以工作。界面就是P99_FOR(NAME, N, OP, FUNC,...) 您可以将其与类似#define P00_SEP(NAME, I, REC, RES) REC; RES#define P00_VASSIGN(NAME, X, I) X = (NAME)[I]#define MYASSIGN(NAME, ...) P99_FOR(NAME, P99_NARG(__VA_ARGS__), P00_SEP, P00_VASSIGN, __VA_ARGS__)MYASSIGN(A, toto, tutu);
打开App,查看更多内容
随时随地看视频慕课网APP