原文
將原文精簡了一下:
一:只包含必需的標頭檔案。當foo.c檔案在被編譯時,第一步要做的是預處理,預處理的最終結果可以看作是將stdio.h和time.h中的內容全部放到foo.c檔案中,當然,如果stdio.h和time.h中又包含其它的標頭檔案的話,它們也都全部會被放入到最終的foo.c檔案中,圖2示例了採用gcc的-e選項所獲得的最終預處理完的檔案final.c,從圖中可以看出,本來是7行的檔案變成了1419行,這意味著什麼?意味著如果多包含標頭檔案則編譯所花費的時間將更長。
foo.c
#include
#include
void foo ()
圖1yunli.blog.51cto.com ~
$ gcc -e foo.c >final.c
yunli.blog.51cto.com ~
$ vi final.c
1414 # 3 "foo.c" 2
1415
1416 void foo ()
1417
:set nu 圖2
二:盡可能不要在標頭檔案中包含其它的標頭檔案,取而代之的是盡量在.c原始檔中包含它們。對於圖3和圖4兩種實現方式,光從foo()函式的角度來說是一模一樣的,只是對於stdio.h標頭檔案的包含乙個是放在foo.h中的,而另乙個則是放在foo.c中的。大部分情形下設計乙個模組的目的是需要供其它的模組使用,而其它的模組在需要使用foo()函式時通常需要包含foo.h標頭檔案。採用圖3的實現方式將造成包含foo.h標頭檔案則會導致間接地包含stdio.h,進而出現前面所講的編譯速度下降這一問題。
foo.h
#include
void foo ();
foo.c
#include 「foo.h」
void foo () 圖3
foo.h
void foo ();
foo.c
#include
#include 「foo.h」
void foo () 圖3
程式設計好習慣 精確包含標頭檔案
本文出自 至簡李雲 部落格,請務必保留此出處 請注意這裡用的是 精確 而不是 正確 之所以不說正確,那是因為如果標頭檔案沒有被正確地包含的話,編譯器是不會生成最終的目標 的。那用精確一詞想表達除正確之外的什麼意思呢?包含兩層意思。第一層意思是,只包含必需的標頭檔案。圖1是乙個簡單的示例程式,先讓我們...
程式設計好習慣 精確包含標頭檔案
請注意這裡用的是 精確 而不是 正確 之所以不說正確,那是因為如果標頭檔案沒有被正確地包含的話,編譯器是不會生成最終的目標 的。那用精確一詞想表達除正確之外的什麼意思呢?包含兩層意思。第一層意思是,只包含必需的標頭檔案。圖1是乙個簡單的示例程式,先讓我們假設這個檔案只有foo 乙個函式的實現,在fo...
C 標頭檔案包含
c 編譯是一件非常費時的事情,為了盡量的減少編譯時間,必須更好的包含標頭檔案。下面有幾條很重要的教條,可以參考。1 在標頭檔案中能用類前置宣告代替標頭檔案包含的就用前置宣告。因為使用類前置宣告,當引用的類發生改變時,當前檔案不需要重新編譯。a 必須要包含標頭檔案的情況 a繼承c,a類的標頭檔案中必須...