主要为了实现一个宏 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)); printf("%d\n", MACRO_COND(0, 2, 3));
return 0; }
|
这里需要注意:
cond扩展出来需要是0或者1, 否则会出错
opt和alt扩展出来不要带游离的,,否则参数个数会出错
参考
C语言-宏扩展