为什么要先包含相关标头?

时间:2018-10-09 08:42:19

标签: c++ header-files

对于问题C/C++ include file order/best practices,最佳答案建议首先包含相关的标题。

GoogleMozilla样式指南相同。

但是,在两种情况下,我都找不到您为什么要这样做的充分理由。

Google和Mozilla编码规则对我来说看起来最好,因为它们会强制您首先包含最“标准”的标头。

这样,我认为您不太可能弄乱包含的文件(例如,通过未定义其他标头中使用的某些宏等),因此这似乎是我的最佳选择。

但是按照这个原理,为什么要先包含相关的标头?由于其中的任何语法错误都可能使以下所有标头混乱?

我认为最好在最后包含相关标头。

2 个答案:

答案 0 :(得分:40)

这是为了确保您的客户在添加库标头时不会讨厌您。

如果标题易碎,并且由于错误的包含顺序而受到破坏,那么它可能不是在您第一次使用时就在您的环境中工作的-因为您包含了 所需的标题,但无法编译客户端代码。因为可能根本不明显,还需要插入其他标头才能使其正常工作。

首先包括与当前实现文件相对应的标头,以检查标头是否独立。自给自足不仅仅包括必要的标题。它还需要为您在API中使用的类型添加所需的前向声明。当然,如果您在其前面包含类型的标题,则标题会编译,但您可能不希望将其插入,因为您仅依赖于API中的类型名称。

某些样式指南禁止使用前向声明,因此这些声明可能不构成其基本原理。

答案 1 :(得分:15)

首先包含与cpp文件相关的头,以确保该头是自包含的,不需要其他包含即可编译