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