首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言編譯全過程深度剖析:預處理→編譯→匯編→連結

     編輯:關於C語言

四大階段概覽

  1. 預處理:展開巨集、包含檔案、條件編譯 → .i
  2. 編譯:詞法/語法/語義分析、優化 → 匯編碼 .s
  3. 匯編:匯編碼 → 機器碼目標檔 .o
  4. 連結:合併多目標檔與函式庫 → 可執行檔

編譯器前端五步驟(以 array[index] = (index+4)*(2+6); 為例)

1. 詞法分析

掃描器(Scanner)將字元流切分為 Token:

工具:lex / flex。

2. 語法分析

語法分析器依上下文無關文法建構語法樹(Syntax Tree),節點為運算式。錯誤如括號不匹配、缺運算元即在此報出。工具:yacc / bison。

3. 語義分析

為樹節點標註型別、檢查型別相容、隱性轉換。僅處理靜態語義(編譯期可決),動態語義(如除零)屬執行期。

4. 中間代碼生成與優化

將語法樹線性化為中間碼(三地址碼、P-code),便於優化。例:(2+6) 常數摺疊為 8。

5. 目標代碼生成與優化

後端依目標架構(x86、ARM…)產生機器指令,進行指令選擇、暫存器分配、窺孔優化(如位移代替乘法)。

連結器的角色

解決跨模組符號引用(extern 變數/函式),確定最終位址,產出可執行檔(ELF/PE/Mach-O)。

參考資源

《程式設計師的自我修養——鏈接、裝載與庫》第 41-48 頁。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
Token 類別範例
關鍵字—
識別符array, index
字面量4, 2, 6
特殊符號[ ] = ( ) + * ;