【C語言入門學習筆記】如何把C語言程式變成可執行檔案!

2020-08-11 14:45:13

環境

在ANSI的任何一種實現中,存在兩種不同的環境。

翻譯環境:在這個環境裡,原始碼被轉換爲可執行的機器指令。

執行環境:用於實際執行程式碼。

 

翻譯環境

組成一個程式的每個原始檔通過編譯過程分別轉成目的碼

各個目標檔案由鏈接器捆綁在一起,形成一個單一而完整的可執行程式。

鏈接器同時也會引入標準c函數庫中的任何被改程式所用到的函數。

過程如下圖所示

實際上,翻譯環境本身也有幾個階段組成:

 

編譯

預編譯階段:在這個階段主要進行一些文字操作,如處理預處理指令,刪除註釋,#define宏替換,條件編譯。

我們可以在linux平臺下測試一下,在這個階段會產生一個.i檔案。

首先寫一個簡單的程式,比如hello world,儲存爲test.c檔案。

使用如下程式碼:

gcc -E test.c -o test.i

此時會出現一個test.i檔案,vim開啓可以觀察到裏面的程式碼已經不再是原來的hello world了,這一步會將#include包含的檔案全部複製過來。

 

編譯階段

主要對程式碼進行解析,分析出語法錯誤詞法錯誤,並且符號彙總。這一階段完成後會形成.s檔案,並且將c程式碼轉成彙編語言。

使用如下程式碼:

gcc -S test.i -o test.s

開啓可以觀察到:都是彙編程式碼。

 

彙編階段

在這一階段,會形成符號表。並且將彙編程式碼轉換成機器指令,二進制序列。

使用如下程式碼

gcc -c test.s -o test.o

開啓可以看到,全部都是一些我們看不懂的東西,其實就是二進制序列。

 

鏈接

鏈接這一階段主要是合併段表,合併符號表和對符號表的重定位。

編譯階段結束後,會生成一個a.out的檔案,這個就是我們說的可執行程式,中間產生的.i .s .o檔案會被自動刪除(可使用程式碼保留)。

./a.out

此時可以看到螢幕上已經列印了hello world了。

 

執行環境

首先,程式必須載入記憶體,這個任務由操作系統完成。在獨立環境中,必須手工安排,比如通過把可執行程式碼置入只讀記憶體(ROM)來完成。

接着,呼叫main函數。

執行程式程式碼,程式將使用一個執行時堆疊,用於儲存函數的區域性變數和返回地址,程式同時也可以使用靜態記憶體,儲存於靜態記憶體中的變數在整個執行過程中將一直保留他們的值。

終止程式。可以是正常終止,也可能是出現錯誤自行中斷。


如果你也想學程式設計,可以來我的C語言/C++程式設計學習基地【點選進入】!

還有免費的(原始碼,零基礎教學,專案實戰教學視訊)!   

涉及:遊戲開發、課程設計、常用軟件開發、程式設計基礎知識、駭客等等...