读者:一个头文件可以包含另一头文件吗?
阿一:这是个风格问题, 因此有不少的争论。很多人认为 “嵌套包含文件” 应该避免。它让相关定义更难找到,如果一个文件被包含了两次, 它会导致重复定义 错误; 同时他会令 makefile 的人工维护十分困难。
另一方面, 它使模块化使用头文 件成为一种可能 (一个头文件可以包含它所需要的一切, 而不是让每个源文件都包 含需要的头文件); 类似 grep 的工具 (或 tags 文件) 使搜索定义十分容易, 无论它在 哪里; 一种流行的头文件定义技巧是:
#ifndef HFILENAME_USED
#define HFILENAME_USED
... 头文件内容 ... #endif
每一个头文件都使用了一个独一无二的宏名。这令头文件可自我识别,以便 可以安全的多次包含; 而自动 Makefile 维护工具 (无论如何, 在大型项目中都是必 不可少的) 可以很容易的处理嵌套包含文件的依赖问题。