最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2016年04月18日 09:52:15   作者:Lynn-Zhang  
C/C++程序編譯過(guò)程包括下面4個(gè)階段:1.預(yù)處理,2.編譯,3.匯編,4.鏈接。下面我們就來(lái)詳細(xì)分析下這幾個(gè)階段。

程序的基本流程如圖:

1.預(yù)處理

預(yù)處理相當(dāng)于根據(jù)預(yù)處理指令組裝新的C/C++程序。經(jīng)過(guò)預(yù)處理,會(huì)產(chǎn)生一個(gè)沒(méi)有宏定義,沒(méi)有條件編譯指令,沒(méi)有特殊符號(hào)的輸出文件,這個(gè)文件的含義同原本的文件無(wú)異,只是內(nèi)容上有所不同。

讀取C/C++源程序,對(duì)其中的偽指令(以#開(kāi)頭的指令)進(jìn)行處理

①將所有的“#define”刪除,并且展開(kāi)所有的宏定義

②處理所有的條件編譯指令,如:“#if”、“#ifdef”、“#elif”、“#else”、“endif”等。這些偽指令的引入使得程序員可以通過(guò)定義不同的宏來(lái)決定編譯程序?qū)δ男┐a進(jìn)行處理。預(yù)編譯程序?qū)⒏鶕?jù)有關(guān)的文件,將那些不必要的代碼過(guò)濾掉。

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

(注意:這個(gè)過(guò)程可能是遞歸進(jìn)行的,也就是說(shuō)被包含的文件可能還包含其他文件)

刪除所有的注釋

添加行號(hào)和文件名標(biāo)識(shí)。

以便于編譯時(shí)編譯器產(chǎn)生調(diào)試用的行號(hào)信息及用于編譯時(shí)產(chǎn)生的編譯錯(cuò)誤或警告時(shí)能夠顯示行號(hào)

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

2.編譯

將預(yù)處理完的文件進(jìn)行一系列詞法分析、語(yǔ)法分析、語(yǔ)義分析及優(yōu)化后,產(chǎn)生相應(yīng)的匯編代碼文件。

3.匯編

將編譯完的匯編代碼文件翻譯成機(jī)器指令,并生成可重定位目標(biāo)程序的.o文件,該文件為二進(jìn)制文件,字節(jié)編碼是機(jī)器指令。

匯編器是將匯編代碼轉(zhuǎn)變成機(jī)器可以執(zhí)行的指令,每一個(gè)匯編語(yǔ)句幾乎都對(duì)應(yīng)一條機(jī)器指令。所以匯編器的匯編過(guò)程相對(duì)于編譯器來(lái)講比較簡(jiǎn)單,它沒(méi)有復(fù)雜的語(yǔ)法,也沒(méi)有語(yǔ)義,也不需要做指令優(yōu)化,只是根據(jù)匯編指令和機(jī)器指令的對(duì)照表一一翻譯即可。

4.鏈接

通過(guò)鏈接器將一個(gè)個(gè)目標(biāo)文件(或許還會(huì)有庫(kù)文件)鏈接在一起生成一個(gè)完整的可執(zhí)行程序。

由匯編程序生成的目標(biāo)文件并不能立即就被執(zhí)行,其中可能還有許多沒(méi)有解決的問(wèn)題。

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

鏈接程序的主要工作就是將有關(guān)的目標(biāo)文件彼此相連接,也就是將在一個(gè)文件中引用的符號(hào)同該符號(hào)在另外一個(gè)文件中的定義連接起來(lái),使得所有的這些目標(biāo)文件成為一個(gè)能夠被操作系統(tǒng)裝入執(zhí)行的統(tǒng)一整體。

至此,大致經(jīng)過(guò)這幾個(gè)步驟,一個(gè)完整的可執(zhí)行程序產(chǎn)生了。

相關(guān)文章

  • C語(yǔ)言代碼實(shí)現(xiàn)猜數(shù)字

    C語(yǔ)言代碼實(shí)現(xiàn)猜數(shù)字

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言代碼實(shí)現(xiàn)猜數(shù)字,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • 如何在C++中實(shí)現(xiàn)一個(gè)正確的時(shí)間循環(huán)器詳解

    如何在C++中實(shí)現(xiàn)一個(gè)正確的時(shí)間循環(huán)器詳解

    這篇文章主要給大家介紹了關(guān)于如何在C++中實(shí)現(xiàn)一個(gè)正確的時(shí)間循環(huán)器的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • C語(yǔ)言深入講解之從函數(shù)棧幀角度理解return關(guān)鍵字

    C語(yǔ)言深入講解之從函數(shù)棧幀角度理解return關(guān)鍵字

    在C語(yǔ)言中,一般情況下函數(shù)的返回值是通過(guò)函數(shù)中的return語(yǔ)句來(lái)實(shí)現(xiàn)的,每調(diào)用一次return語(yǔ)句只能從函數(shù)中返回一個(gè)值,這篇文章主要給大家介紹了關(guān)于C語(yǔ)言從函數(shù)棧幀角度理解return關(guān)鍵字的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • 基于Qt實(shí)現(xiàn)簡(jiǎn)易GIF播放器的示例代碼

    基于Qt實(shí)現(xiàn)簡(jiǎn)易GIF播放器的示例代碼

    這篇文章主要介紹了如何利用Qt設(shè)計(jì)一個(gè)簡(jiǎn)易GIF播放器,可以播放GIF動(dòng)畫(huà)。其基本功能有載入文件、播放、暫停、停止、快進(jìn)和快退,感興趣的可以了解一下
    2022-06-06
  • 詳解C++中移動(dòng)語(yǔ)義的概念與使用

    詳解C++中移動(dòng)語(yǔ)義的概念與使用

    本篇文章主要為大家詳細(xì)介紹了C++中移動(dòng)語(yǔ)義的相關(guān)知識(shí),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧
    2023-06-06
  • 詳解C++設(shè)計(jì)模式編程中對(duì)訪問(wèn)者模式的運(yùn)用

    詳解C++設(shè)計(jì)模式編程中對(duì)訪問(wèn)者模式的運(yùn)用

    這篇文章主要介紹了C++設(shè)計(jì)模式編程中對(duì)訪問(wèn)者模式的運(yùn)用,訪問(wèn)者模式在不破壞類的前提下為類提供增加新的新操作,需要的朋友可以參考下
    2016-03-03
  • 判斷本機(jī)office安裝版本的方法分享

    判斷本機(jī)office安裝版本的方法分享

    這篇文章主要介紹了判斷本機(jī)office安裝版本的方法分享,需要的朋友可以參考下
    2014-01-01
  • Qt實(shí)現(xiàn)日志文件的滾動(dòng)寫(xiě)入

    Qt實(shí)現(xiàn)日志文件的滾動(dòng)寫(xiě)入

    這篇文章主要為大家介紹了如何使用Qt實(shí)現(xiàn)日志文件的滾動(dòng)寫(xiě)入功能,在日志文件達(dá)到10MB時(shí)創(chuàng)建新的日志文件,并且在總?cè)罩疚募笮∵_(dá)到10GB時(shí)開(kāi)始覆蓋最早的日志文件,需要的可以參考下
    2024-11-11
  • Qt QChart 創(chuàng)建圖表的實(shí)現(xiàn)方法

    Qt QChart 創(chuàng)建圖表的實(shí)現(xiàn)方法

    這篇文章主要介紹了Qt QChart 創(chuàng)建圖表的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 詳解在C++中顯式默認(rèn)設(shè)置的函數(shù)和已刪除的函數(shù)的方法

    詳解在C++中顯式默認(rèn)設(shè)置的函數(shù)和已刪除的函數(shù)的方法

    這篇文章主要介紹了在C++中顯式默認(rèn)設(shè)置的函數(shù)和已刪除的函數(shù)的方法,文中講到了C++11標(biāo)準(zhǔn)中的新特性,需要的朋友可以參考下
    2016-01-01

最新評(píng)論

永泰县| 鄂托克前旗| 延川县| 台北县| 治县。| 阳信县| 宁津县| 深水埗区| 临西县| 秀山| 建瓯市| 济南市| 江源县| 连云港市| 枣强县| 达州市| 彭州市| 洞头县| 巨野县| 科技| 栾城县| 辽阳市| 承德市| 威远县| 伊宁市| 岑溪市| 苗栗市| 伽师县| 五台县| 乌鲁木齐市| 临夏市| 宝丰县| 江川县| 长治市| 老河口市| 林甸县| 洪雅县| 上杭县| 阿荣旗| 嘉善县| 普陀区|