头文件的使用
1 将什么放进头文件中?基本规则是“只声明”,也就是说,对于编译器只需要一些信息以产生代码或创建变量分配内存。因为在一个项目中,头文件也许会包含在几个处理单元中,而如果内存分配不止一个地方,则连接器会产生多重定义错误。
这个规则不是非常严格的。如果在头文件中定义“静态文件”的一段数据(只在文件内可见,比如const变量),在这个项目中将有这个数据的多个实例,编译器不会报错。基本上,不要在头文件中做在连接时会引起混淆的任何事情。
2 C 和C++ 都允许对函数重复声明,只要这些重复声明匹配,但决不允许对结构重复声明。在C++ 中,这个规则特别重要,因为,如果编译器允许对结构重复声明而且这两个重复声明又不一样,编译器将无法知道该使用哪一个。为了防止重复包含同一个头文件,可使用以下宏
#ifndef FOO_H_
#define FOO_H_
// Rest of header here ...
#endif // FOO_H_
#ifdef和#endif应该成对出现,#define定义一个宏,#undef则可以让预处理器取消宏的使用。
在头文件中,不应该using指令,否则包含这个头文件的文件都会使用这个指定的命名空间,从而失去了命名空间的命名保护的意义。