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

大廠電車夏季續航大挑戰

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

於盛夏彰顯「大廠電車」實力

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

被車企拖賬期可投訴!工信部開通問題反映窗口

7月9日,工業和信息化部在「全國違約拖欠中小企業款項投訴平台」開通「重點車企踐行賬期承諾線上問題(建議)反映窗口」(https://sme-dj.miit.gov.cn/car),受理中小企業關於重點車企踐行貨款支付周期承諾和落實《保障中小企業款項支付條例》不力等問題(建議)的反映,協調相關方面推動解決。據介紹,該窗口主要受理4類...
百萬獎金 + 頂配資源!AI 創業者徵集令 - 天天要聞

百萬獎金 + 頂配資源!AI 創業者徵集令

「AI賦能未來:創新與應用的無限可能」 復曜青溪 智鏈長三角 ——上海銀行杯AI創新創業大賽正式啟動! 這裡不僅是技術的競技場更是夢想的孵化器 聚焦AI技術在技術創新、產業應用中的跨界融合 推動AI模型從實驗室走向真實場景,構建AI生態 文末掃碼報名,期待您的參與和關注!...
X30WCrCoV9-3是一種高端熱作合金模具鋼 - 天天要聞

X30WCrCoV9-3是一種高端熱作合金模具鋼

X30WCrCoV9-3工具鋼:高性能熱作模具鋼的綜合解析X30WCrCoV9-3是一種高端熱作合金模具鋼,專為極端高溫、高壓工況設計。其核心優勢在於優異的高溫強度、耐熱疲勞性和韌性,尤其適用於大型複雜模具製造(如航空航天、汽車工業的熱鍛模
從音頻到健康:AirPods營收有望於2026年突破千億美元 - 天天要聞

從音頻到健康:AirPods營收有望於2026年突破千億美元

【環球網科技綜合報道】7月9日消息,據Counterpoint Research最新報告,蘋果AirPods系列年營收預計將在2026年實現2.4%同比增長,累計總營收突破1000億美元大關。這一增長不僅源於產品矩陣的多元化布局,更得益於健康科技與AI技術的深度融合,標誌着TWS(真無線立體聲)耳機從消費電子向醫療健康領域的戰略躍遷。2024年,蘋...
茶顏悅色以線上電商形式布局海外市場 - 天天要聞

茶顏悅色以線上電商形式布局海外市場

北京商報訊(記者 張天元)7月9日,茶飲品牌茶顏悅色宣布將以線上電商的形式進入北美市場,包括Shopify獨立站店鋪,亞馬遜、TikTok、沃爾瑪、weee、亞米上的品牌自營店鋪,共6家店,在華盛頓時間7月9日0點之後陸續上線。據介紹,第一批上線包括將近40多個產品,涵蓋零食、茶具和周邊文創,例如乾脆麵包丁、魔芋爽、陶瓷杯等...
全球媒體聚焦丨《商業內幕》網站:有個詞叫「雙贏」——一個美國人的深圳創業日記 - 天天要聞

全球媒體聚焦丨《商業內幕》網站:有個詞叫「雙贏」——一個美國人的深圳創業日記

「我是一個美國人,搬來中國生活七年了。目前經營着一家盈利的初創公司,還通過打羽毛球結交了不少朋友。」 這段自述,是美國《商業內幕》網站近日發表的一篇文章的標題。文章講述了這位名叫喬舒亞·查爾斯·伍德沃德的美國人移居中國,並在中國創業的故事。美國《商業內幕》網站截圖 喬舒亞14歲時,得知一家香港公司收購了...