- 使用標准的頭文件包含順序可增強可讀性, 避免隱藏依賴。
- 《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》