首先引出問題:
keil編寫c程序,有一些器件的使用,寫成文件之後,再include進去,用起來比較方便。
寫成頭文件,再 include “xxxx.h”
和 寫成源文件,再 include “xxxx.c”
調試了都可以,但我不知 這從 原理 上有什麼區別?
問題解答:
(1)#include 指令
該指令指示編譯器將xxx.xxx文件的全部內容插入此處,也就說 #include等效於複製、粘貼, 另外編譯器會編譯.c文件,不會編譯.h文件
舉例說明:
假設有a.c和b.c,b.c中include
a.c。實際相當於直接把a.c插入b.c中include的位置,編譯的是b.c
假設有a.c,a.h和b.c,b.c中include a.h。一般.h寫的都只是聲明(函數聲明,外部變量聲明等)。
此時首先是將a.h插入b.c中include的位置。然後編譯a.c,輸出a.o,編譯b.c,輸出b.o。
編譯時由於b.c中引入a.h,所以對於a中的函數或變量有聲明,據此編譯器認爲此函數或變量在某個文件中是存在的,便不會報錯。
最後再進行鏈接,輸出目標文件。
假如是個大工程,都採用include c文件的方式,某個c文件修改過後,編譯時需要全部重新編譯。如果引入的是h文件,沒做修改的部分便不需要再次編譯。