亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

程序的基本流程如圖:

1.預(yù)處理

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

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

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

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

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

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

刪除所有的注釋

添加行號和文件名標識。

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

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

2.編譯

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

3.匯編

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

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

4.鏈接

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

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

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

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

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

相關(guān)文章

  • C++索引越界的解決方法

    C++索引越界的解決方法

    本文主要介紹了C++索引越界的解決方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 一篇文章帶你了解C++面向?qū)ο缶幊?-繼承

    一篇文章帶你了解C++面向?qū)ο缶幊?-繼承

    這篇文章主要介紹了解析C++面對象編程--繼承的運用,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-08-08
  • C/C++中的靜態(tài)變量注意事項

    C/C++中的靜態(tài)變量注意事項

    本文主要介紹了C/C++中的靜態(tài)變量注意事項,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • C語言獲取Linux系統(tǒng)精確時間的方法

    C語言獲取Linux系統(tǒng)精確時間的方法

    下面小編就為大家?guī)硪黄狢語言獲取Linux系統(tǒng)精確時間的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • C++計算ICMP頭的校驗和實例

    C++計算ICMP頭的校驗和實例

    這篇文章主要介紹了C++計算ICMP頭的校驗和的方法,代碼簡單實用,對于校驗ICMP報文來說有不錯的實用價值,需要的朋友可以參考下
    2014-10-10
  • C++關(guān)于構(gòu)造函數(shù)可向父類或者本類傳參的講解

    C++關(guān)于構(gòu)造函數(shù)可向父類或者本類傳參的講解

    今天小編就為大家分享一篇關(guān)于C++關(guān)于構(gòu)造函數(shù)可向父類或者本類傳參的講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • VC通過托盤圖標得到該所屬進程的實現(xiàn)代碼

    VC通過托盤圖標得到該所屬進程的實現(xiàn)代碼

    這篇文章主要介紹了VC通過托盤圖標得到該所屬進程的實現(xiàn)代碼,為了方便大家使用特將多個代碼分享給大家,需要的朋友可以參考下
    2021-10-10
  • C++求階乘的兩種方法

    C++求階乘的兩種方法

    這篇文章主要介紹了C++求階乘的兩種方法,有需要的朋友可以參考一下
    2013-12-12
  • C語言驅(qū)動開發(fā)內(nèi)核枚舉IoTimer定時器解析

    C語言驅(qū)動開發(fā)內(nèi)核枚舉IoTimer定時器解析

    這篇文章主要為大家介紹了C語言驅(qū)動開發(fā)內(nèi)核枚舉IoTimer定時器解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • C語言實現(xiàn)文本文件/二進制文件格式互換

    C語言實現(xiàn)文本文件/二進制文件格式互換

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)文本文件和二進制文件格式互換,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03

最新評論