问一个头文件可以#include另一个?
答这是个风格问题,因此引起了激烈的争论。许多人认为“嵌套#include文件”应该避免:著名的印度山风格指南(参见问题 17.9)不赞成它们;它们会使查找相关定义变得更加困难;如果一个文件被#include包含两次,它们可能导致多重定义错误;它们可能导致编译时间增加;并且它们使 Makefile 的手动维护非常困难。另一方面,它们使得头文件可以以模块化的方式使用(一个头文件可以#include自行包含它需要的东西,而不是要求每个#include文件都这样做);像grep(或一个 tags 文件)这样的工具可以轻松地找到定义,无论它们在哪里;一个流行的技巧,类似于
#ifndef HFILENAME_USED #define HFILENAME_USED ...header file contents... #endif(其中为每个头文件使用不同的括号宏名称)使头文件“幂等”,因此它可以安全地被#include包含多次;一个聪明的编译器可以避免在已包含头文件的后续实例上花费额外的时间;并且自动的 Makefile 维护工具(在大型项目中是必不可少的;参见问题 18.1)可以轻松处理嵌套#include文件时的依赖项生成。另请参见问题 17.10。
参考文献:Rationale 第 4.1.2 节