C++編譯過程

C++編譯過程主要分爲,預處理、編譯、彙編、鏈接四個過程。如下圖所示:
在這裏插入圖片描述

第一步:預處理

將源代碼的.c 、.cpp 、.h 等文件包含到一個文件中。在這個過程中會使用一些預處理指令要求編譯器使用什麼樣的方式包含這些文件。預處理結束之後對於c語言編譯器會生成一個.i 文件。C++會生成.ii文件。

【瞭解即可】
預編譯過程主要處理那些源代碼中以#開始的預編譯指令,主要處理規則如下:
將所有的#define刪除,並且展開所有的宏定義;
處理所有條件編譯指令,如#if,#ifdef等;
處理#include預編譯指令,將被包含的文件插入到該預編譯指令的位置。該過程遞歸進行,及被包含的文件可能還包含其他文件。
刪除所有的註釋//和 /**/;
添加行號和文件標識,如#2 “hello.c” 2,以便於編譯時編譯器產生調試用的行號信息及用於編譯時產生編譯錯誤或警告時能夠顯示行號信息;
保留所有的#pragma編譯器指令,因爲編譯器須要使用它們;

第二步:編譯

編譯過程就是把預處理完的文件進行一系列詞法分析,語法分析,語義分析及優化後生成相應的彙編代碼文件.

第三步:彙編

彙編器是將彙編代碼轉變成機器可以執行的命令,每一個彙編語句幾乎都對應一條機器指令。彙編相對於編譯過程比較簡單,根據彙編指令和機器指令的對照表一一翻譯即可。

第四步:鏈接

鏈接器ld將各個目標文件組裝在一起,解決符號依賴,庫依賴關係,並生成可執行文件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章