C预处理程序流控制取决于函数参数

C预处理程序流控制取决于函数参数

我想做的是这样的事

#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/

10-11 16:29