【C语言入门学习笔记】如何把C语言程序变成可执行文件!
環境
在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语言程序变成可执行文件!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 购物促销活动推广语言43句
- 下一篇: 难懂又有深意的情侣网名111个