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語言的編譯器工作原理 - 天天要聞

科技分類資訊推薦

三星Galaxy Watch Ultra 2025發佈 售價4999元 - 天天要聞

三星Galaxy Watch Ultra 2025發佈 售價4999元

7月9號消息,三星在今晚帶來了一系列新品,其中Galaxy Watch Ultra(2025)可應對高達55℃的高溫、9000米海拔高度和10個大氣壓的深海壓力,並且搭載新一代3nm處理器,運行更平穩。
Imagination GPU部門被中芯國際收購?官方回應 - 天天要聞

Imagination GPU部門被中芯國際收購?官方回應

近日有網傳消息稱,中芯國際通過全資子公司以5.6億美元現金收購英國Imagination GPU IP部門,甚至交易已經獲得中國和歐盟監管部門的批准。Imagination官方也被逼無奈,通過官方公眾號發佈了一份澄清函。
全網最嚴格,白澤獎評測標準公開 - 天天要聞

全網最嚴格,白澤獎評測標準公開

輔助駕駛的評測方式五花八門,但是我們發現一個問題,那就是大多數的評測都是將主動安全、領航輔助與智能泊車分開。並且這裏面缺失了一個很重要的東西,那就是用戶調研。我們做白澤獎,目的是做全面的評測和評價,那麼用戶調研就是必不可少的一部分。白澤獎是
北方桑拿天超長待機 未來一周這些地區人員注意防暑 - 天天要聞

北方桑拿天超長待機 未來一周這些地區人員注意防暑

近期,我國南北方多地持續高溫酷熱未來一周,北方桑拿天頻現不少地方體感溫度可達40℃以上將生生被「蒸」服其中,山東、河南等地熱得十分突出濟南、鄭州桑拿天將天天見北京、天津、石家莊等地桑拿天也可持續6天未來十天河北中南部、黃淮、江漢及陝西關中等地將持續高溫部分地區最高氣溫可達39至41℃注意防暑降溫!(來...