當前位置:編程學習大全網 - 源碼下載 - 頭文件是源代碼嗎

頭文件是源代碼嗎

頭文件和源文件在本質上沒有任何區別。? 只不過壹般:後綴為 ?.h 的文件是頭文件,內含函數聲明、宏定義、結構體定義等內容。後綴為 ?.c 的文件是源文件,內含函數實現,變量定義等內容。而且是什麽後綴也沒有關系,只不過編譯器會默認對某些後綴的文件采取某些動作。這樣分開寫成兩個文件是壹個良好的編程風格。

簡單的說其實要理解C文件與頭文件(即.h)有什麽不同之處,首先需要弄明白編譯器的工作過程,壹般說來編譯器會做以下幾個過程:

①預處理階段

②詞法與語法分析階段

③ 編譯階段,首先編譯成純匯編語句,再將之匯編成跟CPU相關的二進制碼,生成各 個目標文件 (.obj文件)

④連接階段,將各個目標文件中的各段代碼進行絕對地址定位,生成跟特定平臺相關 ? 的可執行文件,當然,最後還可以用objcopy生成純二進制碼,也就是去掉了文件格 式信 息。(生成.exe文件)

3.比方說 在aaa.h裏定義了壹個函數的聲明,然後在aaa.h的同壹個目錄下建立aaa.c , aaa.c裏定義了這個函數的實現,然後是在main函數所在.c文件裏#include這個aaa.h? 然後我就可以使用這個函數了。 main在運行時就會找到這個定義了這個函數的aaa.c文件。這是因為:main函數為標準C/C++的程序入口,編譯器會先找到該函數所在的文件。假定編譯程序編譯myproj.c(其中含main())時,發現它include了mylib.h(其中聲明了函數void test()),那麽此時編譯器將按照事先設定的路徑(Include路徑列表及代碼文件所在的路徑)查找與之同名的實現文件(擴展名為.cpp或.c,此例中為mylib.c),如果找到該文件,並在其中找到該函數(此例中為void test())的實現代碼,則繼續編譯;如果在指定目錄找不到實現文件,或者在該文件及後續的各include文件中未找到實現代碼,則返回壹個編譯錯誤.其實include的過程完全可以“看成”是壹個文件拼接的過程,將聲明和實現分別寫在頭文件及C文件中,或者將二者同時寫在頭文件中,理論上沒有本質的區別。以上是所謂動態方式。對於靜態方式,基本所有的C/C++編譯器都支持壹種鏈接方式被稱為Static Link,即所謂靜態鏈接。在這種方式下,我們所要做的,就是寫出包含函數,類等等聲明的頭文件(a.h,b.h,...),以及他們對應的實現文件(a.cpp,b.cpp,...),編譯程序會將其編譯為靜態的庫文件(a.lib,b.lib,...)。在隨後的代碼重用過程中,我們只需要提供相應的頭文件(.h)和相應的庫文件(.lib),就可以使用過去的代碼了。相對動態方式而言,靜態方式的好處是實現代碼的隱蔽性,即C++中提倡的“接口對外,實現代碼不可見”。有利於庫文件的轉發.

  • 上一篇:學霸隱藏的32個全科學習app!
  • 下一篇:足球經理的FM系統
  • copyright 2024編程學習大全網