头文件的文件作用域中声明的名字,可能潜在地与整个系统中任何其他文件作用域中的名字冲突。即使在一个.c文件的文件作用域中声明为带有内部链接的名字也不能保证一定不与.h文件的文件作用域名字冲突。
主要设计规则
在一个.h文件作用域中只应该声明类、结构体、联合体和自由运算符函数;在.h文件作用域中只应该定义类、结构体、联合体和内联(成员或自由运算符)函数。
我们希望在一个头文件的文件作用域中只能找到类声明、类定义、自由运算符声明和内联函数定义。在类作用域内嵌套所有其他的结构,可以消除与名字冲突有关的大多数问题。
为了辅助说明这个规则,图2-4中提供了一个包含许多结构并带有注释的无意义的头文件。注意,其中有一个用户自定义类型的静态实例,这是一个特例,将在7.8.1.3节论述。现在,在.h文件中,避免这些静态用户自定对象可作为一个指南而不是一个规则。