我可以依赖嵌套的#includes吗

Can I rely on nested #includes?

本文关键字:#includes 嵌套 依赖 我可以      更新时间:2023-10-16

可能重复:
C++风格的问题:#包含什么?

当我#include是头文件,并且我还需要第一个文件中已经#包含的其他文件时,我应该依赖第一个#include还是应该全部依赖#include

我知道它无论如何都会起作用,但我想知道什么是最好的做法。

如果我不依赖,这意味着我可以在文件中列出几十个#includes。这有道理吗?

好吧,如果其他人在维护第一个头文件,那么不,你不能依赖它!

正是出于这个原因,我更喜欢在源文件中显式地包含所有依赖项(即声明直接使用的符号的标头)。不过,我怀疑你是否能找到一个真正的最佳实践。每种方法都有利弊。

但一旦你选择了一种方法,请始终如一地应用它!没有什么比一个混杂了不同include风格的项目更糟糕的了。

这取决于您设计的策略。我总是遵循以下一个:

在标头中,始终包含要使用干净的.c/.cpp文件编译该标头所需的任何内容。

在实现文件中,始终包括直接使用的所有内容。

当然,您应该只包括基本头文件。但是,即使你碰巧包含了你的文件,你的头文件也有包含gaurds,它应该避免多次包含。

当I#包含头文件时还需要其他已经存在的文件#从第一个包含,我应该依赖第一个#include还是应该#包括所有这些?

通常不会,因为头文件拖进了哪个头文件,所以通常是一个实现细节。

然而,在实践中,不可能编写包含所有平台的所有必要标头的代码。特别是在C++中,标准库头可以自由地从标准库中拖动其他头。例如,您的代码可能会进行编译,因为您不知道编译器的<iostream>会拖到<string>中。

因此,包含所有相关标头的合理努力是合理的,也就是说,这样做的不合理努力是不合理的。:-)

干杯&hth。,