为什么需要
// 有三个头文件,a.h,b.h, c.h
// b.h里存在语句:
#include "a.h"
// c.h里存在语句:
#include "a.h"
#include "b.h"
// 那么在编译时,c.h里会包含两次a.h文件
// 假设a.h里定义一个变量,则在c.h文件中会重复定义两次,造成冲突
原理
同一个文件中不可以存在相同的宏定义
a.h
# ifndef A_H_
# defind A_H_
int a = 0;
......
# endif A_H_
// ifndef检查该文件是否定义了A_H_这个宏, 如果未定义,则定义宏A_H_为后面的程序段,并且编译,如果定义了A_H_这个宏,则执行else, 这里else为空,即什么都不执行
c.h
# include "b.h" // 这里展开后已经定义宏A_H_
# include "a.h" // 由于语句定义了宏A_H_, 则不执行a.h文件中# defind A_H_语句