关于#ifndef 和#define的问题
//b.h文件
#include "a.h"
//c.h文件
#include "a.h"
#include "b.h"
在c.h文件中,a.h文件被包含了两次.而C++规定在同一文件中只能将同一个头文件包含一次.#ifndef,#define,#endif可以避免多次包含同一头文件.
//新的c.h文件
#ifndef C_H_H
#define C_H_H
#include "a.h"
#include "b.h"
...
#endif
编译器连接c.h文件时,第一次遇到a.h文件,名称C_H_H还没有被定义,编译器将查看#ifndef和#endif之间的内容.如果在同一文件中遇到其他包含a.h的代码,编译器将知道C_H_H名称已经被定义了,从而忽略其中的内容.
PS:我对红色部分的解释不是很懂,对于新定义的c.h文件,首先执行#ifndef C_H_H ,发现C_H_H没有定义,接着执行 #define C_H_H ,然后顺序执行#include "a.h" 和#include "b.h",这样不是还是重复引用吗 ?