.c文件应该包含它的.h文件已经包含的内容吗?
Should a .c file include something that it's .h file already includes?
这是Google C++风格指南中关于#include
的部分:
如果您依赖 bar.h 中的符号,请不要指望您包含 foo.h 的事实,其中(当前(包含 bar.h:包括 bar.h 自己,除非 foo.h 明确表明其意图为您提供 bar.h 的符号。
但是,相关标头中存在的任何包含都不需要再次包含在相关 cc 中(即,foo.cc 可以依赖 foo.h 的包含(。
当我读到这里时,这些句子似乎相互矛盾。他们对我说:
- 如果
foo.cc
需要bar.h
的东西,它必须包括bar.h
。 - 如果
foo.cc
需要bar.h
的东西,foo.cc
包括foo.h
,foo.h
包括bar.h
,那么foo.cc
不需要包括bar.h
。
为什么这些句子不矛盾?
第二段讨论一种特殊情况:实现相应.h
文件中声明的函数的.cc
文件。由于 .cc
和 .h
文件旨在紧密相关并串联维护(通常由同一程序员维护(,因此.cc
文件可能取决于其相关头文件中的内容。
第一段讨论的是包含头文件的其他文件。
所以foo.cc
可以依赖于foo.h
中的包含,但bar.cc
应该同时包含foo.h
和baz.h
。
相关文章:
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?
- C++文件包含多行
- CMake 如何强制third_party库将项目文件包含在当前项目源目录中?
- 是否可以将要"ShellExecute"的文件包含在 dll 中?如果是这样,"ShellExecute"中的文件位置应该是什么?
- C++ 逐行从文件(包含空格)读取数据
- 在 C++ 中,.h 文件包含文件但不起作用
- 生成的资源文件包含奇怪的包含文件
- 可变参数类的文件包含问题
- 为什么文件命令声明可执行文件包含"debug_info"
- 可以将标头文件包含在多个源文件中,而无需重复保护
- 为什么将.HPP文件包含在.h文件中
- Qt C++:将所有库文件包含在项目文件夹中
- 有条件地将文件包含在C++标头中
- 将多个原型文件包含在一个项目中会导致protobuf_AssignDescriptorsOnce()已经有一个主体
- 有没有办法将文件包含在C++中的所有项目文件中
- 将外部.asm文件包含到C++代码中
- 什么是"pch.h",为什么需要将其作为第一个头文件包含在内?
- 该头文件包含DirectX 12中的ThrowIfFailed()
- QT C :函数的多个定义当Header文件包含在MainWindow.h中时
- QT创建者错误地处理标头文件包含来自Directory