我想做的是这样的事
#define TRIPLE_LOOP(code)\
//if there is something in code \
for(...) for(...) for(...) { code }\
//if code is empty then\
SOME_OTHER_CODE
以便
TRIPLE_LOOP(printf("muhahaha"))
将在输出的三个循环中生成printf
和
TRIPLE_LOOP()
会产生一些其他的代码
这可能吗?
最佳答案
这几乎对我有效:)
#include <stdio.h>
#define NARGS2(_1, N, ...) N
#define NARGS(...) NARGS2(__VA_ARGS__, 1, 0)
#define TRIPLELOOP(...) \
do { \
if (NARGS(__VA_ARGS__)) { \
int i, j, k; \
for (i=0; i<2; i++) { \
for (j=0; j<2; j++) { \
for (k=0; k<2; k++) { \
__VA_ARGS__; \
} \
} \
} \
} else { \
printf("NO ARGS"); \
} \
} while (0)
int main(void) {
TRIPLELOOP(printf("haha"); puts("!"));
TRIPLELOOP();
}
它也works at ideone。
关于c - C预处理程序流控制取决于函数参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6760701/