天天看點

.c和.h檔

可一再聲明,但不是很多定義

對于一個項目,我們應該要非常好的處理衆多的.c和.h檔案

1.通過頭檔案調用庫功能:#include <stdio.h>  

在非常多場合,源碼不便(或不準)向使用者釋出,僅僅要向使用者提供頭檔案和二進制的庫就可以

2.人為定義的.h檔案:#include "avformat.h"

一般提供了結構體的聲明或者定義,函數的聲明.枚舉的聲明或者定義.宏變量的定義等

而其定義是在.c檔案裡實作.

自己定義的兩種情況:

1.

.c和.h檔

2.

.c和.h檔

假定編譯程式編譯D.c(當中含main())時,發現它include了A.h(當中聲明了某一函數),那麼此時編譯器将依照事先設定的路徑(Include路徑清單及代碼檔案所在的路徑)查找該函數定義.

1.在目前檔案夾找到了與之同名的A.c檔案,在當中找到該函數定義,繼續編譯.

2.在目前檔案夾找到了與之同名的A.c檔案,在當中沒有找到函數定義,然後查找A.c檔案include的其他.h檔案相相應的.c檔案.若找到函數定義,繼續編譯.

3.在目前檔案夾未找到與之同名的A.c檔案,則查找A.h中include的其他.h檔案向相應的.c檔案,若找到函數定義,繼續編譯.

4.假設都沒有找到此函數定義,則傳回一個編譯錯誤.

include的過程全然能夠“看成”是一個檔案拼接的過程.

若想了解其查找過程,應該去了解編譯器的工作原理.

在一個項目中,會有.h檔案被多次引用,這樣.h檔案就會被放到多個.c檔案裡被多次編譯,我們要盡量避免這種多次聲明.進而提高效率.

.c和.h檔

上面的D.h檔案裡就會反複出現兩個int a();的聲明,這樣就有點反複了,這時條件編譯宏就派上了用場

.c和.h檔

這樣就不會反複定義了.

版權聲明:本文部落客原創文章,部落格,未經同意不得轉載。