可一再聲明,但不是很多定義
對于一個項目,我們應該要非常好的處理衆多的.c和.h檔案
1.通過頭檔案調用庫功能:#include <stdio.h>
在非常多場合,源碼不便(或不準)向使用者釋出,僅僅要向使用者提供頭檔案和二進制的庫就可以
2.人為定義的.h檔案:#include "avformat.h"
一般提供了結構體的聲明或者定義,函數的聲明.枚舉的聲明或者定義.宏變量的定義等
而其定義是在.c檔案裡實作.
自己定義的兩種情況:
1.

2.
假定編譯程式編譯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檔案裡被多次編譯,我們要盡量避免這種多次聲明.進而提高效率.
上面的D.h檔案裡就會反複出現兩個int a();的聲明,這樣就有點反複了,這時條件編譯宏就派上了用場
這樣就不會反複定義了.
版權聲明:本文部落客原創文章,部落格,未經同意不得轉載。