.c文件应该包含它的.h文件已经包含的内容吗?

Should a .c file include something that it's .h file already includes?

本文关键字:文件 包含 包含它      更新时间:2023-10-16

这是Google C++风格指南中关于#include的部分:

如果您依赖 bar.h 中的符号,请不要指望您包含 foo.h 的事实,其中(当前(包含 bar.h:包括 bar.h 自己,除非 foo.h 明确表明其意图为您提供 bar.h 的符号。

但是,相关

标头中存在的任何包含都不需要再次包含在相关 cc 中(即,foo.cc 可以依赖 foo.h 的包含(。

当我读到这里时,这些句子似乎相互矛盾。他们对我说:

  1. 如果foo.cc需要bar.h的东西,它必须包括bar.h
  2. 如果foo.cc需要bar.h的东西,foo.cc包括foo.hfoo.h包括bar.h,那么foo.cc不需要包括bar.h

为什么这些句子不矛盾?

第二段讨论一种特殊情况:实现相应.h文件中声明的函数的.cc文件。由于 .cc.h 文件旨在紧密相关并串联维护(通常由同一程序员维护(,因此.cc文件可能取决于其相关头文件中的内容。

第一段讨论的是包含头文件的其他文件。

所以foo.cc可以依赖于foo.h中的包含,但bar.cc应该同时包含foo.hbaz.h