这样定义是为了避免重复定义。重复声明可以,但是重复定义是不可以的。
重复声明只要名称完全相同即可。但是重复定义会出现编译错误的,即使同名也不可以。
多次包含可能会引来重复定义。比如a.h中包含了b.h和c.h,而c.h包含了b.h,那么编译
a.h时,b.h被编译了2遍。我们熟知b.h头文件中有FILE类型的定义,于是FILE被定义了2遍
在b.h头文件中用
#ifndef __b_h
#define __b_h
//...头文件体
#endif
包含住头文件体的内容,在第一次包含__b_h时,__b_h未定义,此时定义__b_h,在第二次包含时,
__b_h已定义,#ifndef __b_h为false,头文件体
#define __b_h
//...头文件体
#endif
之间的内容会被丢弃。因此避免了重复包含头文件体的内容而重复定义。