摘要
为头(文件)添加保护:在所有头文件中使用带有惟一名称的包含保护符(#include guard)防止无意的多次包含。
讨论
应该用内部包含保护符保护每个头文件,以避免在多次包含时重新定义。例如,头文件foo.h应该采用下面的一般形式:
#ifndef FOO_H_INCLUDED_
#define FOO_H_INCLUDED_
// ……文件内容……
#endif
定义包含保护符时,应该遵守如下规则:
l 保护符使用惟一名称:确保名称至少在你的应用程序中是惟一的。上面的代码中采用了流行的命名规范,保护符名称可以包含应用程序名称,还有一些工具,能够生成包含随机数的保护符名称。
l 不要自作聪明:不要在受保护部分的前后放置代码或者注释,要谨遵上面的标准形式。虽然如今的预处理器能够检测出包含保护符,但是它们的智商有限,只认识正好位于头文件开始和结束处的保护代码。
避免使用一些比较老的书中所提倡的已经过时了的外部包含保护符:
#ifndef FOO_H_INCLUDED_ // 不推荐
#include "foo.h"
#define FOO_H_INCLUDED_
#endif
外部包含保护符非常令人厌烦,对于当今的编译器来说已经过时了,而且因为耦合太紧密(调用者和头文件必须就保护符名称达成一致),很容易出错。
例外情况
在一些非常罕见的情况下,可能需要多次包含一个头文件。





