日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【C语言入门学习笔记】如何把C语言程序变成可执行文件!

發布時間:2023/12/2 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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函數。

執行程序代碼,程序將使用一個運行時堆棧,用于存儲函數的局部變量和返回地址,程序同時也可以使用靜態內存,存儲于靜態內存中的變量在整個執行過程中將一直保留他們的值。

終止程序??梢允钦=K止,也可能是出現錯誤自行中斷。

來源于網絡,如有侵權,告知必刪。

總結

以上是生活随笔為你收集整理的【C语言入门学习笔记】如何把C语言程序变成可执行文件!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。