一、編譯過程簡介
編譯過程可以分為4部分內容組成
預處理器->編譯器->彙編器->鏈結器
1、預處理器
(1)、處理所有的注釋,以空格代替
(2)、講所有的#define刪除,並且展開所有的巨集定義
(3)、處理條件編譯指令#if,#ifdef、#elif,#else、#endif
(4)、處理#include,展開檔案包含
(5)、保留編譯器需要使用#pragma指令
預處理指令示例:
gcc -e file.c -o file.i
2、編譯器
(1)、對預處理檔案進行語法分析、詞法分析、語義分析
語法分析:分析表示式是否遵循語法規則
詞法分析:分析關鍵字,識別符號,立即數是否合法
語義分析:在語法分析基礎上進一步分析表示式是否合法
(2)、分析結束後進行**優化生成相應的彙編**檔案
編譯指令示例:
gcc -s file.i -o file.s
3、彙編器
(1)、彙編器將彙編**轉變為機器可以執行的指令,也就是機器指令
(2)、每條彙編指令幾乎都對應一條機器指令
彙編指令示例:
gcc - c file.s -o file.o
二、鏈結過程簡介
鏈結是指將目標檔案最終生成可執行檔案
鏈結器的意思:鏈結器的主要作用是把各個模組之間相互引用部分處理好,使得各個模組之間能夠正確的鏈結
(1)、可執行程式在執行時才動態載入庫進行連線
(2)、庫的內容不會進入可執行程式
參考資料「狄泰軟體c語言高階教程」
c語言編譯 鏈結過程
c語言的編譯鏈結過程 把c程式 源 轉換成可以在機器上執行的程式 可執行 需要進行編譯和鏈結的過程。1 編譯 主要包含兩個過程 1 預處理 巨集定義 檔案包含 條件編譯。在正式開始編譯之前根據預處理命令來修改原始檔的內容 2 編譯 優化 通過詞法分析和語法分析將指令翻譯成彙編 2 彙編 把組合語言 ...
C語言的編譯鏈結過程
編寫的乙個c程式 源程式 轉換成可以在硬體上執行的程式 可執行程式 需要進行翻譯環境和執行環境。翻譯環境則包括兩大過程編譯和鏈結,經過編譯和鏈結過程便可形成可執行程式。一 編譯 將文字形式的源 翻譯成計算機認識的機器語言 編譯又分為預處理器處理 編譯 彙編。1.預處理器處理 主要是進行文字操作,包括...
c 編譯鏈結過程
llinux下編譯乙個c 程式的典型過程 1.編譯預處理 預編譯程式完成的工作,可以說成是對源程式的 替換 工作。經過這個過程,生成乙個沒有巨集定義 沒有條件編譯指令 沒有特殊符號的輸出檔案。2.編譯 優化階段 通過詞法分析 語法分析,在確認所有的指令都符合語法規則之後,將其翻譯成等價的中間 或彙編...