国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C/C++程序編譯流程詳解

2020-05-23 14:05:39
字體:
來源:轉載
供稿:網友
C/C++程序編譯過程包括下面4個階段:1.預處理,2.編譯,3.匯編,4.鏈接。下面我們就來詳細分析下這幾個階段。
 

程序的基本流程如圖:

C++,程序編譯

1.預處理

預處理相當于根據預處理指令組裝新的C/C++程序。經過預處理,會產生一個沒有宏定義,沒有條件編譯指令,沒有特殊符號的輸出文件,這個文件的含義同原本的文件無異,只是內容上有所不同。

讀取C/C++源程序,對其中的偽指令(以#開頭的指令)進行處理

①將所有的“#define”刪除,并且展開所有的宏定義

②處理所有的條件編譯指令,如:“#if”、“#ifdef”、“#elif”、“#else”、“endif”等。這些偽指令的引入使得程序員可以通過定義不同的宏來決定編譯程序對哪些代碼進行處理。預編譯程序將根據有關的文件,將那些不必要的代碼過濾掉。

③處理“#include”預編譯指令,將被包含的文件插入到該預編譯指令的位置。

(注意:這個過程可能是遞歸進行的,也就是說被包含的文件可能還包含其他文件)

刪除所有的注釋

添加行號和文件名標識。

以便于編譯時編譯器產生調試用的行號信息及用于編譯時產生的編譯錯誤或警告時能夠顯示行號

保留所有的#pragma編譯器指令

2.編譯

將預處理完的文件進行一系列詞法分析、語法分析、語義分析及優化后,產生相應的匯編代碼文件。

3.匯編

將編譯完的匯編代碼文件翻譯成機器指令,并生成可重定位目標程序的.o文件,該文件為二進制文件,字節編碼是機器指令。

匯編器是將匯編代碼轉變成機器可以執行的指令,每一個匯編語句幾乎都對應一條機器指令。所以匯編器的匯編過程相對于編譯器來講比較簡單,它沒有復雜的語法,也沒有語義,也不需要做指令優化,只是根據匯編指令和機器指令的對照表一一翻譯即可。

4.鏈接

通過鏈接器將一個個目標文件(或許還會有庫文件)鏈接在一起生成一個完整的可執行程序。

由匯編程序生成的目標文件并不能立即就被執行,其中可能還有許多沒有解決的問題。

例如,某個源文件中的函數可能引用了另一個源文件中定義的某個符號(如變量或者函數調用等);在程序中可能調用了某個庫文件中的函數,等等。所有的這些問題,都需要經鏈接程序的處理方能得以解決。

鏈接程序的主要工作就是將有關的目標文件彼此相連接,也就是將在一個文件中引用的符號同該符號在另外一個文件中的定義連接起來,使得所有的這些目標文件成為一個能夠被操作系統裝入執行的統一整體。

至此,大致經過這幾個步驟,一個完整的可執行程序產生了。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 瓦房店市| 丰县| 商河县| 宜丰县| 长乐市| 来凤县| 桃园县| 晋江市| 桂阳县| 天津市| 兴安盟| 通辽市| 景泰县| 咸阳市| 南靖县| 门源| 丹巴县| 龙里县| 社旗县| 中宁县| 崇阳县| 鞍山市| 荆州市| 阿克苏市| 原阳县| 达拉特旗| 延吉市| 兰溪市| 吉林省| 苏尼特右旗| 手游| 太白县| 武定县| 谢通门县| 托克逊县| 泉州市| 信阳市| 贡嘎县| 大名县| 抚顺市| 鄂温|