#include 包含的头文件已包含的头文件是否常见?
Is it common practive to #include header files already included by included header files?
假设我们有一个头文件A.h
它依赖于B.h
和C.h
中声明的内容。B.h
也取决于C.h
,因此包括它。 在这种情况下,我们不需要在A.h
中包含C.h
,如果没有它,它可以很好地编译。
但我想知道在这些情况下最好的行动方案是什么。如果B.h
以某种方式改变并且不再依赖于C.h
,A.h
就会中断。
另一方面,如果我认为这一点到最后,那么重新包含每个依赖项似乎是不必要/不切实际的。
我有一个常见的情况是标准库。在几乎所有的头文件中,我都必须包含<stdint.h>
和<stdbool.h>
。我经常跳过这个,因为它们已经包含在其中一个依赖项中,但这总是感觉有点武断。
如果 B.h 以某种方式发生变化并且不再依赖于 C.h,A.h 就会中断。
完全。为什么要冒险?
另一方面,如果我认为这一点到最后,那么重新包含每个依赖项似乎是不必要/不切实际的。
如果不切实际,则文件具有太多依赖项,并且可能太大。
将其重构为更小的模块。
我有一个常见的情况是标准库。在几乎所有的头文件中,我都必须包含
<stdint.h>
和<stdbool.h>
。我经常跳过这个,因为它们已经包含在其中一个依赖项中,但这总是感觉有点武断。
我承认,当我知道我的一个标头(明确定义为将我需要的类型纳入范围)已经这样做时,有时会跳过这些标头。它不太可能被重构,因为它具有这些标头,而不是出于其他可能消失的依赖项。
但是,归根结底,在您需要的地方包含<stdint.h>
和<stdbool.h>
并没有错。老实说,我很惊讶你发现"几乎所有[你的]头文件"都需要它们。
常见的做法 - 以及我建议的经验法则 - 是所有标头都应该是独立的。
换句话说,如果A.h
中的某些内容只有在#include
dB.h
时才能编译,那么A.h
应该#include "B.h"
。 这避免了在需要使用A.h
时强制使用其他代码
#include "B.h"
#include "A.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