編譯和鏈結背後的機制

2021-08-21 15:15:12 字數 632 閱讀 2758

我們開始程式一般會用ide,也就是整合開發環境,比如visual studio、keil、iar等,ide的出現極大的解放了程式設計師的工作,使得程式設計師不用再去關注過於底層的物理性的操作,而只去關注應用層面的開發,但是也有缺點,就是對於我這種想象力不強的笨程式設計師來講,對於一些底層操作,很難直觀的去想象。

ide同城會將編譯和鏈結的過程一步完成,這個合併的過程,就是我們熟悉的ide中的build,當然也可以單獨編譯,也就是ide中的compile,了解這背後的過程,無疑會幫助程式設計師更好的理解程式的執行機制。

簡單的分析總結:

預編譯:就是處理那些源**檔案中以「#」開始的預編譯指令,比如#include,#define等,主要處理規則就是

·將所有的#define刪除,然後在使用這個巨集的地方展開(所以巨集只是方便程式設計師的),

·對於#include則是將那些包含的標頭檔案展開,copy到當前檔案中。

·刪除所有的注釋

編譯:就是將上面預編譯得到的檔案「翻譯」成彙編**。

彙編:注意這裡的彙編是將上面的彙編**再次翻譯成機器**,可執行的**,每個彙編語句幾乎都對應一條機器指令。

(彙編不是翻譯成彙編語句,而是機器碼)

gcc編譯的背後 預處理 編譯 彙編和鏈結 一

本次將分為四個章節來講,分別來講述一下gcc編譯背後的四個步驟。第一部分 預處理。相信大家對這一塊其實挺了解了,下面我就獻醜,以自己的理解再講一遍。預處理是c語言從源 變成可執行程式的第一步,它包括標頭檔案的包含,巨集定義擴充套件,條件編譯的選擇等。首先介紹一下預處理的命令 一共有12條預處理的命令...

預處理,巨集,隱藏在背後的編譯和鏈結

一.預處理器 在程式設計的時候,第乙個步驟就是預處理 就是編碼之前對其進行文本性的操作。主要有四個作用 1.巨集替換 2.標頭檔案的展開 3.去注釋 4.條件編譯 是否有過這種經歷,編譯的 自己不滿意,過段時間要找,然後找了很長時間,這是可以通過程式找到當時 的目錄檔案,日期,以及行數和時間 都可以...

new 和 delete 背後機制

定義乙個類 a class a a private intvar file file 很簡單,類 a 中有兩個私有成員,有乙個建構函式和乙個析構函式,建構函式中初始化私有變數 var 以及開啟乙個檔案,析構函式關閉開啟的檔案。我們使用 class pa new a 10 來建立乙個類的物件,返回其指...