<kbd id="daqct"></kbd>

  • <nav id="daqct"></nav>
    <wbr id="daqct"><pre id="daqct"></pre></wbr>
    <wbr id="daqct"></wbr>
    <form id="daqct"><th id="daqct"></th></form>
    更多課程 選擇中心

    C/C++培訓
    達內IT學院

    400-111-8989

    一個C/C++程序是怎么從代碼到可執行文件的

    • 發布:C++培訓
    • 來源:學習筆記
    • 時間:2017-06-06 17:48

    我們以我們最初學到的“hello world”程序為例。這個程序在編譯中是這樣進行的,首先執行g++ helloworld.cpp命令得到a.out文件;執行./a.out命令就可以輸出hello world!事實上執行g++ helloworld.cpp可以分為四個步驟,分別是預處理,編譯,匯編,和鏈接,這就像一個被隱藏的過程,使用者可以通過簡單的命令即可完成復雜的步驟。 

    一,預處理

    首先是源代碼文件helloworld.cpp和相關頭文件預處理成一個.i文件。命令如下 g++ -E helloworld.cpp -o helloworld.i預處理的過程主要處理那些源代碼文件中只能夠以“#”開始的預處理指令,主要規則如下: 
    (1)將所以#define刪除,并將宏定義展開。 
    (2)處理一些條件預編譯指令如#if,#ifdef,#elif,#else,#endif等。將不必要的代碼過濾掉。 
    (3)處理#include預編譯指令,將被包含的文件插入到該預編譯指令的位置。這個過程是遞歸進行的,因為被包含的文件可能也包含其他文件。 
    (4)預處理過程還會過濾掉所有注釋”//”和“/**/”里面的內容。(5)另外還會添加行號和文件名標識。 
    (6)最后會保留#pragma編譯器指令,因為編譯器需要使用它們。

    二,編譯

    編譯就是將預處理的文件進行一系列的詞法分析,語法分析,語義分析,以及優化后產生相應的匯編代碼文件,這個過程是程序構建的核心部分,也是最復雜的。執行命令如下: 
        g++ -S helloworld.i -o helloworld.s 
    可以使用vi/vim查看相應的匯編代碼。在這個過程中又分為六步:詞法分析,語法分析,語義分析,源代碼優化,代碼生成和目標代碼優化。具體過程請參照《編譯原理》 

    三,鏈接

    把每個源代碼獨立的編譯,然后按照它們的要求將它們組裝起來,這個組裝模塊的過程就是鏈接,鏈接的過程包括地址和空間的分配,符號決議,和重定位等這些步驟。 
    最基本的靜態鏈接如圖所示: 

    每個目標文件除了擁有自己的數據和二進制代碼外,還擁有三個表,未解決符號表,地址重定向表,導出符號表:①未解決符號表提供了所有在該 編譯單元里引用,但是定義不是在本編譯單元的符號以及其出現的地址;②導出符號表提供本編譯單元具有定義,并且愿意提供給其他單元使用的符號以其地址;③地址重定向表提供所有自身地址的引用的記錄。 
    其中鏈接又分為靜態鏈接和動態鏈接具體請參考其他相關文檔。

    預約申請免費試聽課

    填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

    上一篇:C語言開發環境vs2017修改快捷鍵的使用技巧
    下一篇:1分鐘徹底理解C語言指針的概念

    C語言創建windows窗口實例

    C++回調函數是什么?

    C++ shared_ptr和動態數組

    C語言有哪些關鍵詞,C語言44個關鍵詞大全

    • 掃碼領取資料

      回復關鍵字:視頻資料

      免費領取 達內課程視頻學習資料

    • 視頻學習QQ群

      添加QQ群:1143617948

      免費領取達內課程視頻學習資料

    Copyright ? 2021 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

    選擇城市和中心
    黑龍江省

    吉林省

    河北省

    湖南省

    貴州省

    云南省

    廣西省

    海南省

    欧美三级片,白洁外传,第四色播日韩AV第一页,啪啪免费观看大全av 百度 好搜 搜狗
    <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>