一,預編譯
操作步驟: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語句都必須被其他程式轉化為一系列的低階機器語言指令。然後這些指令按照一種稱為可執行目標程式的...