C语言-宏扩展之条件选择

主要为了实现一个宏 MACRO_COND(cond, opt, alt),如果cond扩展为1则执行opt, 否则执行alt.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>

#define CONCAT2(a, b) a##b
#define CONCAT(a, b) CONCAT2(a, b)

#define MACRO_COND_IF_1(opt, alt) opt
#define MACRO_COND_IF_0(opt, alt) alt
#define MACRO_COND(cond, opt, alt) CONCAT(MACRO_COND_IF_, cond)(opt, alt)

int main(int argc, char *argv[])
{
printf("%d\n", MACRO_COND(1, 2, 3)); // 2
printf("%d\n", MACRO_COND(0, 2, 3)); // 3

return 0;
}

这里需要注意:

  • cond扩展出来需要是0或者1, 否则会出错
  • optalt扩展出来不要带游离的,,否则参数个数会出错

参考

C语言-宏扩展