1.根据宏是否定义
#define 宏名
#ifdef 宏名
/*code1*/
#else
/*code2*/
#endif
执行顺序:宏名如果定义则编译code1,否则编译code2
例子:
2.根据宏值
#define 宏名 值#if 宏名
/*code1*/
#else
/*code2*/
#endif
执行顺序:宏的值为非0则编译code1,为0则编译code2
例子:
#include <stdio.h>
#define DEF 0
int main(int argc, char const *argv[])
{
#if DEF //如果DEF为真则编译下面代码,否则编译#else下面代码
printf("hello\n");
#else
printf("world\n");
#endif
return 0;
}
3.防止头文件重复包含
放在头文件中:
#ifndef 宏名
#define 宏名
/*code*/
#endif
报错原因:多次引用了包含struct test结构体定义的头文件,所以造成结构体重复定义
修改:加上防止头文件重复包含