gcc 預處理(預編譯),編譯,彙編,鏈結

2021-09-27 08:30:49 字數 1004 閱讀 5115

一,預編譯

操作步驟:gcc -e hello.c -o hello.i

主要作用:

處理關於 「#」 的指令

刪除#define,展開所有巨集定義。例#define portnumber 3333

處理條件預編譯 #if, #ifdef, #if, #elif,#endif

處理「#include」預編譯指令,將包含的「.h」檔案插入對應位置。這可是遞迴進行的,檔案內可能包含其他「.h」檔案。

刪除所有注釋。/**/,//。

新增行號和檔案識別符號。用於顯示除錯資訊:錯誤或警告的位置。

保留#pragma編譯器指令。(1)設定編譯器狀態,(2)指示編譯器完成一些特定的動作。

二,編譯(編譯器主要做了什麼)

操作步驟:gcc -s hello.c -o hello.s

主要作用:1.掃瞄(詞法分析),2.語法分析,3.語義分析,4.源**優化(中間語言生成),5.**生成,目標**優化。

將源**程式輸入掃瞄器,將源**的字串行分割成一系列記號。例array[index] =  (index + 4) * (2 + 6);

基於詞法分析得到的一系列記號,生成語法樹。

由語義分析器完成,指示判斷是否合法,並不判斷對錯。又分靜態語義:隱含浮點型到整形的轉換,會報warning,

動態語義:在執行時才能確定:例1除以3

中間**(語言)使得編譯器分為前端和後端,前端產生與機器(或環境)無關的中間**,編譯器的後端將中間**轉換為目標機器**,目的:乙個前端對多個後端,適應不同平台。

編譯器後端主要包括:**生成器:依賴於目標機器,依賴目標機器的不同字長,暫存器,資料型別等

目標**優化器:選擇合適的定址方式,左移右移代替乘除,刪除多餘指令。

三,彙編

操作步驟:gcc -c hello.c -o hello.o

主要作用:彙編器是將彙編**轉變成可以執行的指令,生成 目標檔案。

四,鏈結

操作步驟:gcc hello.o -o hello

gcc 預處理(預編譯),編譯,彙編,鏈結

一,預編譯 操作步驟 gcc e hello.c o hello.i 主要作用 處理關於 的指令 刪除 define,展開所有巨集定義。例 define portnumber 3333 處理條件預編譯 if,ifdef,if,elif,endif 處理 include 預編譯指令,將包含的 h 檔案...

GCC編譯過程(預處理 編譯 彙編 鏈結)

gcc編譯過程 預處理 編譯 彙編 鏈結 這裡gcc編譯器 是指在linux類作業系統下,windows編譯器 mingw 相當於windows版gcc 乙個c c 檔案要經過預處理 preprocessing 編譯 compilation 彙編 assembly 和鏈結 linking 等4步才能...

gcc預處理 編譯 彙編 鏈結詳解

讓我們來用最簡單的程式理解一下我們的編譯系統 include int main hello程式的生命週期是從乙個高階語言c語言程式開始,因為這種形式能夠人讀懂。然而,為了在系統上執行hello.c程式,每條c語句都必須被其他程式轉化為一系列的低階機器語言指令。然後這些指令按照一種稱為可執行目標程式的...