C/C+編程筆記:C語言的編譯器工作原理

2020年12月07日23:40:10 科技 1738

以gcc編譯器為例子,編譯實際上總共經歷了四個階段

預處理--->編譯--->彙編--->鏈接

C/C+編程筆記:C語言的編譯器工作原理 - 天天要聞

1.預處理階段:編譯器以cpp文件作為一個單元,首先讀這個cpp文件,發現第一句與第二句包含一個頭文件,就會在所有搜索路徑中尋找這兩個頭文件,找到之後,就會到相應頭文件中再去處理宏、變數、函數聲明、嵌套的頭文件等。

檢測依賴關係,進行宏替換,看是否有重複定義與聲明的情況發生,最後將那些文件中所有的東東全部掃描進這個當前的cpp文件中,形成一個中間"cpp文件"。

在這一步中相當於將那個頭文件中的test變數掃描進了一個中間cpp文件,那麼test變數就變成了這個文件中的一個全局變數。在stdio.h這個頭文件中有一些函數的聲明,這時也把這些函數的聲明一股腦的掃描到了這個中間cpp文件中(只是掃描了函數的聲明,並沒有實現)。

C/C+編程筆記:C語言的編譯器工作原理 - 天天要聞

2.編譯階段:此時就為這個中間cpp文件的所有變數、函數形參分配空間(原則上,在這裡只能看到.h文件中函數、變數的聲明,為變數和函數的形參等分配空間),將各個函數編譯成二進位碼,按照特定目標文件格式生成目標文件。

在這種格式的目標文件中進行各個全局變數、函數的符號描述(編譯器維護一個符號描述表),將這些二進位碼按照一定的標準組織成一個目標文件。

C/C+編程筆記:C語言的編譯器工作原理 - 天天要聞

此時的每一個cpp文件都被編譯器編譯成了一個目標文件,同時每個目標文件都有一張符號表,這張符號表中記錄了這個cpp文件都用到了哪些變數,哪些函數,函數的參數是什麼類型的,有幾個參數。

同時為變數和函數形參開闢了內存空間。所以這裡編譯器把你這個cpp用到的所有的東西都記錄下來了,如果有重複定義或者沒有定義的變數、函數等,編譯器一下子就知道了。

3.連接階段:將上一步成生的各個目標文件,根據一些參數,連接生成最終的可執行文件,主要的工作就是重定位各個目標文件的函數、變數等,相當於將個目標文件中的二進位碼按一定的規範合到一個文件中。

C/C+編程筆記:C語言的編譯器工作原理 - 天天要聞

科技分類資訊推薦

牆板安裝、地磚鋪貼……首屆粵港澳建築機器人大賽好燃 - 天天要聞

牆板安裝、地磚鋪貼……首屆粵港澳建築機器人大賽好燃

7月8日,首屆粵港澳建築機器人大賽在華南理工大學(廣州國際校區)舉辦。據悉,本次大賽由廣東省住房和城鄉建設廳、香港特別行政區政府發展局聯合指導,粵港澳智能建造產業發展聯盟與香港建造業議會主辦,中建三局深圳公司等企業聯合承辦。
多個賬號仿冒「K1373砸窗小伙」 平台:新增攔截仿冒策略 - 天天要聞

多個賬號仿冒「K1373砸窗小伙」 平台:新增攔截仿冒策略

7月9日上午,紅星新聞記者瀏覽發現,自官方通報「男子在列車上砸車窗通風」事件後,社交平台上湧現出多個以「K1373砸窗小伙」「砸車窗小伙」等命名的網路賬號。其中,有一名為「砸玻璃的小夥子」的用戶更是在抖音發布視頻作品,表示自己就是那個砸玻璃的男人。 ▲社交平台上出現多個相關的賬號記者查看這些賬號,發現其中大...
撕掉偽創新!嵐圖CEO盧放:我們只做能扛5萬次顛簸的「低調技術」 - 天天要聞

撕掉偽創新!嵐圖CEO盧放:我們只做能扛5萬次顛簸的「低調技術」

7月9日,嵐圖FREE+以一場史無前例的「暴力開箱」直播震撼行業:在-30℃極寒冰封、500公斤重壓、超國標500%強度的5萬次顛簸震動後,其空氣懸架系統不僅毫髮無損,連門把手、電吸門等細節功能均全程零異常,相當於在極寒的漠河超滿載連跑5年顛簸路後,嵐圖FREE+空懸品質依然穩定可靠。這場對「百萬級豪車底盤」的地獄式拷問,...
築牢網路安全屏障——七台河市成功舉辦2025年度網路安全培訓與網路安全應急演練 - 天天要聞

築牢網路安全屏障——七台河市成功舉辦2025年度網路安全培訓與網路安全應急演練

七台河市成功舉辦2025年度網路安全培訓與網路安全應急演練築牢網路安全屏障7月9日,七台河市委網信辦聯合市公安局、市營商環境局組織開展2025年七台河市網路安全培訓及網路安全應急演練。此次網路安全培訓、應急演練活動旨在紮實備戰年度網路安全工作,全面提升全市網路安全突發事件的應急處置能力。各縣(區)委網信辦、市...
一汽奔騰悅意雙子星探秘長白山 - 天天要聞

一汽奔騰悅意雙子星探秘長白山

長白疊翠,天池澄碧!7月7日,一汽奔騰悅意雙子星開展長白山深度試駕,實測夏季續航與蜿蜒山路的駕駛體驗。「大大大雙子星」奔騰悅意03和奔騰悅意07馳騁高速、穿越叢林,穩穩「拿捏」林海與峽谷。從針闊混交林到高山苔原,從盤山公路到非鋪裝越野路段,於盛夏彰顯「大廠電車