程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C/C++法式編譯流程詳解

C/C++法式編譯流程詳解

編輯:關於C++

C/C++法式編譯流程詳解。本站提示廣大學習愛好者:(C/C++法式編譯流程詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是C/C++法式編譯流程詳解正文


法式的根本流程如圖:

1.預處置

預處置相當於依據預處置指令組裝新的C/C++法式。經由預處置,會發生一個沒有宏界說,沒有前提編譯指令,沒有特別符號的輸入文件,這個文件的寄義同本來的文件無異,只是內容上有所分歧。

讀取C/C++源法式,對個中的偽指令(以#開首的指令)停止處置

①將一切的“#define”刪除,而且睜開一切的宏界說

②處置一切的前提編譯指令,如:“#if”、“#ifdef”、“#elif”、“#else”、“endif”等。這些偽指令的引入使得法式員可以經由過程界說分歧的宏來決議編譯法式對哪些代碼停止處置。預編譯法式將依據有關的文件,將那些不用要的代碼過濾失落。

③處置“#include”預編譯指令,將被包括的文件拔出到該預編譯指令的地位。

(留意:這個進程能夠是遞歸停止的,也就是說被包括的文件能夠還包括其他文件)

刪除一切的正文

添加行號和文件名標識。

以便於編譯時編譯器發生調試用的行號信息及用於編譯時發生的編譯毛病或正告時可以或許顯示行號

保存一切的#pragma編譯器指令

2.編譯

將預處置完的文件停止一系列詞法剖析、語法剖析、語義剖析及優化後,發生響應的匯編代碼文件。

3.匯編

將編譯完的匯編代碼文件翻譯成機械指令,並生成可重定位目的法式的.o文件,該文件為二進制文件,字節編碼是機械指令。

匯編器是將匯編代碼改變成機械可以履行的指令,每個匯編語句簡直都對應一條機械指令。所以匯編器的匯編進程絕對於編譯器來說比擬簡略,它沒有龐雜的語法,也沒有語義,也不須要做指令優化,只是依據匯編指令和機械指令的對比表逐個翻譯便可。

4.鏈接

經由過程鏈接器將一個個目的文件(也許還會有庫文件)鏈接在一路生成一個完全的可履行法式。

由匯編法式生成的目的文件其實不能立刻就被履行,個中能夠還有很多沒有處理的成績。

例如,某個源文件中的函數能夠援用了另外一個源文件中界說的某個符號(如變量或許函數挪用等);在法式中能夠挪用了某個庫文件中的函數,等等。一切的這些成績,都須要經鏈接法式的處置方能得以處理。

鏈接法式的重要任務就是將有關的目的文件彼此相銜接,也就是將在一個文件中援用的符號同該符號在別的一個文件中的界說銜接起來,使得一切的這些目的文件成為一個可以或許被操作體系裝入履行的同一全體。

至此,年夜致經由這幾個步調,一個完全的可履行法式發生了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved