C 編譯和鏈結

2022-08-22 06:09:13 字數 641 閱讀 5685

我的個人部落格:

乙份源**要生成乙份可以執行的程式,需要經過的步驟就是編譯和鏈結。

c語言的源**一般以.c和.h結尾,其中的c語言**屬於比較高階的語言,人類可以很輕易的看懂,但是計算機並不能理解,也不能直接執行。計算機只能識別二進位制的資料,c**這種類似於人類自然語言的高階語言,它是不能識別的。

所以c語言需要先進行編譯,這份工作是通過編譯器來完成的。c語言的編譯器有很多,比較常用的是gcc(linux下的c編譯器,當然也有人將其移植到了windows系統中),msvc(微軟提供的編譯器,和vs一起使用)

編譯器編譯c原始碼檔案,生成目標檔案(.obj),這時候的目標檔案還不能執行,需要再經過一步鏈結,鏈結是將多個目標檔案和系統提供的一些元件鏈結到一起,形成乙個可以載入到作業系統中執行的可執行檔案。

這裡,編譯階段中還可以分為三個小階段:

預處理階段:

1、處理以#開頭的預編譯指令,如,#define.

2、處理條件預編譯指令,如#if,#elif, #else, #endif

3、處理#include

4、刪除注釋。

.....

編譯階段:

詞法分析、語法分析、語義分析等。

彙編階段:

把**編譯為彙編檔案,一般會有**段和資料段的生成。

C 的編譯和鏈結

之前一直沒能理解c 編譯的邏輯,所以我一直很好奇,主程式的cpp檔案裡只註明了h標頭檔案,而標頭檔案跟cpp檔案也並不要求一一對應,那麼編譯的時候,系統到底是如何從 件往回找到相對應的函式原始檔呢?現在搞明白了,這裡會用g 來做乙個簡單的邏輯梳理。g 是linux下最常用的編譯工具,而在window...

C 編譯鏈結

過程 一 預編譯 預處理 處理 define if include這類 開頭的語句,這些稱為預編譯指令。這個過程中會把.h檔案和.c cpp檔案組合成最終交給compile過程的原檔案。這個原檔案是不包含任何 開頭的語句的。所有 define定義的巨集也會被替換。二 編譯 把上面那個原檔案編譯成.o...

C 編譯 鏈結

c 程式在編譯的時候主要有以下幾個過程 1.預編譯 預處理 主要是對偽指令 以 開頭的指令 和特殊符號進行處理。偽指令主要包括 1 巨集指令 如 define name adu,undef等。對於第乙個指令,預編譯主要是進行替換,除了name字串常量 對於第二個則取消該巨集定義,以後出現該巨集的地方...