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》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM