最近在閱讀 Google C++ 代碼規範,常用的整理出來,分享給大家。
閱讀的相關規範主要是 Google C++ Style Guide。
作為第一篇,先分享一下頭文件規範。
二、頭文件通常,每一個 .cc 文件都有一個對應的 .h 文件。
也有一些常見例外,如單元測試和只包含 main() 函數的小型 .cc 文件。
正確使用頭文件可令代碼在可讀性、文件大小和性能上大為改觀。
三、Self-contained 頭文件頭文件應該是自給自足( self-contained,可自編譯),以 .h 結尾。
禁止分離出 -inl.h 頭文件的做法。
自給自足的意思是用戶和重構工具不需要為特別場合而包含額外的頭文件和符號(symbols)。
四、頭文件保護所有頭文件都應該使用 #define 或 #pragma once 來防止頭文件被多重包含。
其中 #define 的命名格式當是 :
使用 cpplint 工具來檢查頭文件保護,如果不符合要求,會有下面兩種錯誤提示:
#ifndef header guard has wrong style, please use: <PROJECT>_<PATH>_<FILE>_H_ [build/header_guard]cpplint
#endif line should be "#endif // <PROJECT>_<PATH>_<FILE>_H_ [build/header_guard]cpplint
五、前置聲明儘可能地避免使用前置聲明。
使用 #include 包含需要的頭文件。
定義:前置聲明(forward declaration)是類、函數和模板的純粹聲明,沒伴隨著其定義。
優點:節省編譯時間。
缺點:隱藏依賴關係,依賴升級可能會不兼容甚至引入某些 BUG。
例如對函數進行聲明,後來加了一個參數,就會導致找不到函數。
如果對類進行聲明,類進行調整時,甚至可能導致類的內存錯誤。
只有當函數只有 10 行甚至更少時才將其定義為內聯函數。
定義:當函數被聲明為內聯函數之後,編譯器會將其內聯展開,而不是按通常的函數調用機制進行調用。
優點:內聯函數較小時,可以使代碼性能更高(少一次函數調用)。
缺點:濫用內聯函數導致程序變慢。
注意實現:遞歸和虛函數不能使用內聯。
七、 include 的路徑及順序標準的頭文件包含順序可增強可讀性,避免隱藏依賴。
要求頭文件順序為:相關頭文件、C 庫、C++ 庫、其他庫的 .h、本項目內的 .h。
項目內頭文件應按照項目原始碼目錄樹結構排列,避免使用 UNIX 特殊的快捷目錄. (當前目錄) 或 .. (上級目錄)。
例如 dir/foo.cc 或 dir/foo_test.cc 的主要作用是實現或測試 dir2/foo2.h 的功能,foo.cc 中包含頭文件的次序如下:
1. dir2/foo2.h(優先位置,詳情如下)
2. 空行
3. C 系統頭文件
4. 空行
5. C++ 標準庫頭文件
6. 空行
7. 其他庫的 `.h`文件
8. (可選)空行
9. 本項目內 `.h`文件
八、最後回顧一下,對於頭文件的規範,細分為五個子規範,分別是 Self-contained 頭文件、頭文件保護、前置聲明、內聯函數、include 的路徑及順序。
如果你想查看 Google C++ Style 原文文檔,可以點擊這裡:https://google.github.io/styleguide/cppguide.html
當然,你也可以點擊左下角的原文閱讀來快速到達。
《完》
-EOF-
題圖:來自朋友圈。
上篇文章:2020 騰訊程序設計競賽(二)
推薦:學習 c++11 之各種小技巧
長按二維碼,一起成長學習
▲ 長按關注,天天成長
覺得有幫助可以點擊好看與轉發,謝謝!