C 的編譯過程,預處理指令

2021-10-22 10:43:06 字數 888 閱讀 8354

c++的編譯過程

1)編譯 :把源**翻譯成機器語言,形成目標檔案

1.1)先進行編譯預處理

預處理又稱為預編譯,是做些**文字替換工作。

編譯器執行預處理指令(以#開頭,例如#include)替換成其包含的檔案**。

這個過程會得到不包含#指令的.i檔案。

1.2)編譯優化

這階段要做的工作主要是,通過語法分析和詞法分析,確定所有指令是否符合規則,之後翻譯成彙編**。

這個過程將.i檔案轉化位.s檔案。

1.3) 彙編

把組合語言翻譯成目標機器指令的過程,生成目標檔案(.obj .o等)。

目標檔案中存放的也就是與源程式等效的目標的機器語言**。

目標檔案由段組成,通常至少有兩個段:

**段:包換主要程式的指令。該段是可讀和可執行的,一般不可寫

資料段:存放程式用到的全域性變數或靜態資料。可讀、可寫、可執行。

這個過程將.s檔案轉化成.o檔案。

2)連線 :把目標檔案作業系統的啟動**和庫檔案組織起來形成可執行程式

由匯程式設計序生成的目標檔案並不能立即就執行,還要通過鏈結過程。

原因:1).某個原始檔呼叫了另乙個原始檔中的函式或常量

2).在程式中呼叫了某個庫檔案中的函式

鏈結程式的主要工作就是將有關的目標檔案連線起來。

這個過程將.o檔案轉化成可執行的檔案。

總結:源**-》替換預處理指令-》彙編**-》機器語言**-》連線

預處理指令

1,檔案包含:#include

2,巨集替換:#define

3,條件編譯指令:#if,#ifdef,#ifndef,#else,#error,#pragma

詳細

編譯預處理指令

編譯預處理指令 開頭的是編譯預處理指令 他們不是c語言的成分,但是c餘元程式離不開他們 difine用來定義乙個巨集 difine 名字 值 注意結尾沒有分號 因為不是c語句 名字必須是乙個單詞 值可以是各種東西 在c語言的編譯器開始編譯之前,編譯預處理程式 cpp 會把程式中的名字換成值 完全的文...

C C 編譯預處理指令

眾所周知,你的程式編譯前要做的事就是掃瞄源 對其做初步的轉換,產生新的源 提供給編譯器,這個過程就叫編譯預處理。這個處理過程由預處理器來完成,預處理器是在程式真正執行前由編譯器呼叫的預處理程式。常見的預處理有以下三種 include 是一種最為常見的預處理,主要是做為檔案的引用組合源程式正文。巨集替...

C C 編譯預處理指令

眾所周知,你的程式編譯前要做的事就是掃瞄源 對其做初步的轉換,產生新的源 提供給編譯器,這個過程就叫編譯預處理。這個處理過程由預處理器來完成,預處理器是在程式真正執行前由編譯器呼叫的預處理程式。常見的預處理有以下三種 檔案包含 include 是一種最為常見的預處理,主要是做為檔案的引用組合源程式正...