【发布时间】:2021-04-29 12:41:38
【问题描述】:
#include 指令的推荐顺序是什么?我在 C++ Core Guidelines
例如,它们是否应该这样排序:
#include "OtherHeaderInCurrentLib.h"
#include <third_party_library/header.h>
#include <iostream>
或者他们应该像这样订购:
#include <iostream>
#include <third_party_library/header.h>
#include "OtherHeaderInCurrentLib.h"
在源文件中列出的推荐顺序和在头文件中列出的推荐顺序有什么区别吗?
【问题讨论】:
-
按字母顺序发音
-
我认为如果您的标题包含他们需要的所有内容,这主要是用户偏好。
-
“我怀疑像 ADL 这样的语言特性严重依赖声明顺序” 这是一个明显的迹象,表明这些标头以错误的方式编写。顺序根本不重要。客户应该只
#include实际需要的东西。 -
对于我在 msvc 上使用预编译头文件(超过 2 个十年),它的行为与源文件的第二个示例非常相似。我的意思是在 pch.h 中,我通常包含系统头文件,可能还有第三方头文件,但随后必须将 pch.h 作为您的第一个包含,因为这是您的源文件的要求,因为预编译的头文件实现让编译器忽略
#include "pch.h"以上的所有行 -
这是注定要结束意见的,但我要给我的。把你的放在第一位。它极大地有助于避免基于消费的包含依赖。 IE。如果您的标头需要
<string>,它应该包括<string>。如果您不这样做,但将其放在具有#include <string>的 cpp 中的一堆包含之后,则该事故被隐藏...直到您在其他地方使用它,而消费 cpp 在您之前没有包含<string>标头,现在您想知道 wtf .. 这以前有效,为什么现在不行?简而言之,我同意 eerorika。
标签: c++ include cpp-core-guidelines