#include是c++处理器的一部分,在编译之前运行。#include指示只接受一个参数:头文件名。预处理器用指定的头文件的内容指代每个#include。
1. 头文件经常需要其他头文件
头文件的定义经常使用其他头文件的设施。一个头文件可能被多次包含进同一个原文件中。因此,在设计头文件时,应使其可以多次包含在同一源文件中,必须保证多次包含同一头文件不会引起该头文件定义的类和对象被多次定义。使得头文件安全通用的做法是使用预定义头文件保护符(header guard)。头文件保护符用于避免在已经见到头文件的情况下重新定义该文件的内容。
2. 避免多重包含
在编写头文件时,为避免多重包含,需要额外的预处理器设施。
多文件卫士
#ifndef CLASS_H #define CLASS_H //Define of ClASS class and related functions goes here #endif
首先测试CLASS_H是否未定义,若未定义,那么#ifndef测试成功,跟在#ifndef后面的所有行都被执行;否则,该指示和#endif之间的代码被忽略。
头文件应该包含保护符,如果头文件被多次包含,它可以避免那一理解的编译错误。