C 中的編譯和鏈結過程

2021-09-21 18:24:27 字數 465 閱讀 4527

平時我們所說的編譯主要包括預編譯、編譯、彙編三部分,下面分別簡單介紹一下:

預編譯:由原始檔「.cpp/.c」生成「.i」檔案

主要工作: a 展開所有的巨集定義,消除「#define」;

b 刪除所有的注釋;

c 處理#include預編譯指令,將包含檔案插入到該預編譯的位置;

d 處理所有的預編譯指令,比如#if、#ifdef等

編譯:由「.i」檔案生成「.s」檔案

主要工作:a 詞法分析 -- 識別單詞,確認詞類;比如int i;知道int是乙個型別,i是乙個關鍵字以及 判斷i的名字是否合法

b **生成 -- 生成譯文;

c 語法分析 -- 識別短語和句型的語法屬性;

d 語義分析 -- 確認單詞、短語和句型的語義特徵;

e **優化 -- 修辭、文字編輯;

彙編:由「.s」檔案生成的「.obj」檔案

c 編譯鏈結過程

llinux下編譯乙個c 程式的典型過程 1.編譯預處理 預編譯程式完成的工作,可以說成是對源程式的 替換 工作。經過這個過程,生成乙個沒有巨集定義 沒有條件編譯指令 沒有特殊符號的輸出檔案。2.編譯 優化階段 通過詞法分析 語法分析,在確認所有的指令都符合語法規則之後,將其翻譯成等價的中間 或彙編...

編譯鏈結過程

在談編譯鏈結過程之前我們需要了解一下虛擬位址空間以及程式在編譯鏈結過程時經過了什麼步驟。虛擬位址空間之前在程序空間的部落格中詳細介紹過了,詳見 上圖就是32位系統中4g虛擬位址空間的分布情況 text 段 指令段,存放的是指令 在程式中,我們把區域性變數定義 區域性變數的 定義是指令而不是資料 還有...

c語言編譯 鏈結過程

c語言的編譯鏈結過程 把c程式 源 轉換成可以在機器上執行的程式 可執行 需要進行編譯和鏈結的過程。1 編譯 主要包含兩個過程 1 預處理 巨集定義 檔案包含 條件編譯。在正式開始編譯之前根據預處理命令來修改原始檔的內容 2 編譯 優化 通過詞法分析和語法分析將指令翻譯成彙編 2 彙編 把組合語言 ...