.c文件是否应包含.h文件已包含的内容?

kvu*_*787 2 c++ header-files

以下是#include来自Google的C++风格指南的部分:

如果您依赖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.

为什么这些句子不相矛盾?

Bar*_*mar 7

第二段讨论了一个特例:.cc实现相应.h文件中声明的函数的文件.由于.cc.h文件旨在密切相关并保持串联(通常由同一个程序员),因此该.cc文件可以取决于其相关头文件中的内容.

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

所以foo.cc可以取决于包含foo.h,但bar.cc应该包括foo.hbaz.h.