在C ++ Google样式指南的标题部分,第一行说:
使用标准顺序以提高可读性并避免隐藏的依赖关系: 相关的标题,C库,C ++库,其他库'.h,你的 项目的.h。
但这对我来说是倒退的,因为项目的标题可能依赖于系统标题,而系统标题显然不太可能依赖于项目标题。简化指南中给出的示例,我们得到body
的{{1}}行,这些行依赖于:not(.test)
,标准标题#include
和项目代码库中的另一个文件, X.cpp
:
X.h
如果<vector>
依赖于A.h
,则样式的顺序会隐藏问题。如果标题包含在与最不相关的最相关的顺序中,那么问题就会暴露出来。
我错过了什么?也许相反的论点是,#include "X.h"
#include <vector>
#include "other/module/A.h"
被编译时会暴露出这个问题,但如果没有A.h
开始,那么这个论点就不会出现(即<vector>
只是标题)。
答案 0 :(得分:1)
似乎已经过去了很多年了。
我注意到我实际上使用的是Google Style Guide所指示的标头包含顺序,而没有太多的理由,因为与其他部分不同,“名称和包含顺序”部分中没有给出任何内容。因此,从他们的goals中,我只能猜测这样做是为了保持一致性,并按照他们所说的进行一些自动化操作,以及“只需选择一个[规则]并不再为此担心”,这样人们就可以不再争论规则了。
太糟糕了,因为看起来Nathan's answer在this question中给出的顺序和推理在今天变得更加有意义。就个人而言,我会逐渐切换到包含样式。
希望,将来在C ++代码中管理依赖项方面的改进将使这种情况更好。理想情况下,根本不必担心您声明依赖关系的顺序,并且有更好的时间来检测和删除过时的包含,使用,导入等。