在编译文件时, 某些宏技巧能帮上我们的忙
1) 替换函数名
#warning adfa
#include <stdio.h>
#define fun1 fun2
void fun1() {
printf("1\n");
}
void main() {
fun2();
}
2) 让编译在某个点停下
#error
3) 监控条件编译的走向
void main() {
int i;
#ifdef M1
#warning M1
i=1;
#else
#warning M2
i=2;
#endif
}
4) 灵活条件编译
$ gcc a.c
a.c:13:2: warning: #warning M2
用 -D 定义 M1
$ gcc a.c -DM1
a.c:7:2: warning: #warning M1
5) 如果直接用 #if 会如何
void main() {
int i;
#if M1
#warning M1
i=1;
#else
#warning M2
i=2;
#endif
}
$ gcc a.c -DM1
a.c:6:2: warning: #warning M1
$ gcc a.c -DM1=0
a.c:9:2: warning: #warning M2
我们姑且可以理解 -DM1 等价于 #define M1 1
而在文件头部写 #define M1 a, 输出将是
a.c:9:2: warning: #warning M2