转自:C++之头文件包含顺序
使用标准的头文件包含顺序可增强可读性, 避免隐藏依赖。
-
《Google C++ Style Guide》推荐顺序:(对xxx.cpp)
- xxx.h
- C 系统文件
- C++ 系统文件
- 其他库的 .h 文件
- 本项目内 .h 文件
-
C++编程思想》推荐顺序:(对xxx.cpp)从最特殊到最一般。
- xxx.h
- 本项目内 .h 文件
- 其他库的 .h 文件
- C++ 系统文件
- C 系统文件
-
两者相同的地方是将xxx.h 放在开始,为啥?避免隐藏依赖!我们希望每一个头文件都可以独立编译。
// A.h #pragma once class A { public: A() {}; ~A() {}; private: std::vector<int> m_nArray; }; // A.cpp #include "StdAfx.h" // 预编译头文件 #include <vector> #include "A.h"
这两个文件可以通过编译,不过问题是,头文件A.h隐藏依赖头文件vector。调换一下二者顺序,则无法通过编译。还有就是,第三方想使用A.h的话,还要同时包含vector头文件,并且顺序不能错。这就是隐藏依赖带来的问题!
-
要解决这个问题,先要发现它。方法就是按照标准头文件顺序,则无法通过编译,于是在A.h中添加
#include <vector>
// A.h #pragma once #include <vector> class A { public: A() {}; ~A() {}; private: std::vector<int> m_nArray; }; // A.cpp #include "StdAfx.h" // 预编译头文件 #include "A.h"
两种头文件排序,个人还是倾向于google的办法。一个好处就是项目.h在最后,便于修改。;)