【发布时间】:2017-04-15 00:11:57
【问题描述】:
在 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 是仅标题),则该论点不成立。
【问题讨论】:
-
如果包含的顺序很重要,那么您做错了什么。
-
如果
A.h依赖于<vector>,为什么文件中没有#include <vector>行? -
@HenriMenke @MrEricSir 本指南的重点是防御性编码和发现潜在问题。要发现
A.h缺少标题,您需要按照指南规定的相反顺序包含。我认为该指南的目标正确,但解决方案错误。 -
每个人的风格指南都有。系统头的含义不能被项目头改变,或者以任何方式依赖于它们,但是你可以让项目头依赖于系统头。