一.《
google c++
程式設計風格指南》裡的觀點
二.《dir2/foo2.h (preferred location — see details below).
c system files.
c++ system files.
other libraries' .h files.
your project's .h files.
我們看到的是這裡《google c++ 程式設計風格指南》倡導的原則背後隱藏的目的是:
1. 為了減少隱藏依賴,同時標頭檔案和其實現檔案匹配,應該先包含其首選項(即其對應的標頭檔案)。
2. 除了首選項外,遵循的是從一般到特殊的原則。不過我覺得《google c++ 程式設計風格指南》的順序:c標準庫、c++標準庫、其它庫的標頭檔案、你自己工程的標頭檔案中漏了最前面的一項:作業系統級別的標頭檔案,比如上面的例子sys/types.h估計不能歸入c標準庫,而是linux作業系統提供的sdk吧。因此我覺得更準確的說法應該是:os sdk .h , c標準庫、c++標準庫、其它庫的標頭檔案、你自己工程的標頭檔案。
3.之所以要將標頭檔案所在的工程目錄列出,作用應該是命名空間是一樣的,就是為了區分不小心造成的檔案重名。
c++程式設計思想》中的不同觀點
假設某個cpp如下:
#include
#include "myclass.h"
編譯器的分析過程
先分析,這個沒有錯誤,ok繼續分析
分析"myclass.h",發現編譯錯誤,終止分析並報錯。
如果我們把上述順序調換,變為:
#include "myclass.h"
#include
那麼編譯器先分析"myclass.h",發現編譯錯誤,終止分析並報錯。
明顯可以看出第二種方式能夠令分析速度加快。
把最容易出錯的標頭檔案(也就是最特殊的標頭檔案)首先#include,這有點像短路求值(if ( 0 && 1 )),一旦出錯,後面就不必再分析。
當然如果所有檔案都沒有錯誤,那麼兩種方式的分析速度會一樣快。
綜合來看,我們應該以這樣的方式來#include標頭檔案:
從最特殊到最一般,也就是,
#include "本類標頭檔案"
#include "本目錄標頭檔案"
#include "自己寫的工具標頭檔案"
#include "第三方標頭檔案"
#include "平台相關標頭檔案"
#include "c++庫標頭檔案"
#include "c庫標頭檔案"
預編譯標頭檔案:防止同一組標頭檔案在多個cpp檔案中被重複分析。
標頭檔案守衛:防止同一標頭檔案在單個cpp檔案中被重複分析。
標頭檔案包含順序有最特殊到最一般:使用短路編譯以加快編譯出錯的過程。
參考:《c++程式設計思想第二版》p432
參考文獻:
C 標頭檔案包含順序
使用標準的標頭檔案包含順序可增強可讀性,避免隱藏依賴。h c 系統檔案 c 系統檔案 其他庫的 h 檔案 本專案內 h 檔案 h 本專案內 h 檔案 其他庫的 h 檔案 c 系統檔案 c 系統檔案 為了減少隱藏依賴,同時標頭檔案和其實現檔案匹配,應該先包含其首選項 即其對應的標頭檔案 google風...
C 標頭檔案包含
c 編譯是一件非常費時的事情,為了盡量的減少編譯時間,必須更好的包含標頭檔案。下面有幾條很重要的教條,可以參考。1 在標頭檔案中能用類前置宣告代替標頭檔案包含的就用前置宣告。因為使用類前置宣告,當引用的類發生改變時,當前檔案不需要重新編譯。a 必須要包含標頭檔案的情況 a繼承c,a類的標頭檔案中必須...
標頭檔案包含順序以及設計原則
關於c的標頭檔案包含,我認為體現了軟體的模組設計以及包含關係,對於標頭檔案包含,我個人看法如下 1.乙個基礎標頭檔案提供常用的資料型別 修飾符以及基礎操作巨集。例如叫basicdef.h 2.標頭檔案盡量只包含 basicdef.h,依賴模組的標頭檔案,也未必需要加到頭檔案中。3.global.h作...