预编译可以防止重复引用或者重复定义
有 #ifndef 和 #if
另一种就是 #pragma once,在文件第一行加上即可,例如VS2017在新建头文件后都自带此句
#ifndef 假(未编译)
执行内容
#endif
#ifndef 真(已编译)
不执行内容
#endif
和
#if 真
执行内容
#endif
#if 假
不执行内容
#endif
#ifndef 给头文件起个名NAME
#define NAME
/*头文件内容*/
#endif
举例:一个叫 fun.h 的头文件,被 A 文件和 B 文件同时引用,那么这个 fun.h 这么写
/*如果 FUN 已经存在(已编译),就跳过 ,否则编译*/
#ifndef FUN
#define FUN
void hello()
{
printf("hello world");
}
#endif
其实它们里面还可以包含若干个 #if 或者 #ifndef 结构
例如上面的 fun.h 头文件:
/*如果 FUN 已经存在(已编译),就跳过 ,否则编译*/
#ifndef FUN
#define FUN
void hello()
{
printf("hello world");
}
/*如果 N 已经存在,就定义 M ,否则跳过*/
#if N
#define M 5
#endif //#if的
#endif //#ifndef的