4

在 C++ Google Style Guide 的标题部分中,第一行说:

使用标准顺序以提高可读性并避免隐藏依赖项:相关头文件、C 库、C++ 库、其他库的 .h、您的项目的 .h。

但这对我来说似乎是倒退的,因为项目的标头可能依赖于系统标头,而系统标头显然不太可能依赖于项目标头。简化指南中给出的示例,我们得到以下几#include行,X.cpp它依赖于X.h标准头<vector>文件和项目代码库中的另一个文件,A.h

#include "X.h"

#include <vector>

#include "other/module/A.h"

如果A.h是依赖<vector>,则样式的顺序隐藏了问题。如果标题按最相关到最不相关的顺序包含,则问题将暴露出来。

我错过了什么?也许相反的论点是这个问题会在A.cpp编译时暴露出来,但如果没有A.cpp开始(即A.h仅标题),则该论点不成立。

4

1 回答 1

1

似乎已经过去了好几年没有答案。

我注意到我实际上使用的是由Google Style Guide规定的标题包含顺序,没有太多的理由,因为在名称和包含顺序部分中确实没有给出,与其他部分不同。因此,从他们的目标来看,我只能猜测这样做是为了保持一致性,如他们所说,允许一些自动化,以及“只需选择一个 [规则] 并停止担心它”,这样人们就可以停止争论规则。

太糟糕了,因为看起来内森这个问题中的回答给出的顺序和推理在今天更有意义。就个人而言,我会逐渐切换到那种风格的包含。

希望将来在 C++ 代码中管理依赖项方面的改进将使这种情况变得更好。理想情况下,根本不必担心声明依赖项的顺序,并且有更好的时间检测和删除过时的包含、使用、导入等。

于 2020-05-20T12:42:22.407 回答