一c/c++源**從最初的文字變為可執行檔案主要進行三大步
預編譯階段:主要是編譯器執行**文字處理工作,並不會進行語法檢查
主要執行三大類預編譯命令
巨集定義:**文字替換功能,將使用了巨集的地方採取巨集定義方式直接展開
條件編譯:**文字剪下功能,根據設定的條件選擇性刪除一些**片段
包含檔案: **文字插入功能 #include 包含其他標頭檔案,#include其內部實現是將被包含的標頭檔案**插入到當前**文字中
首先是巨集定義:做文字展開 因此在定義簡單邏輯功能巨集時,易發生錯誤
#define pi 3.1415926
#define s(a, b) a * b
int main()
執行結果:
編譯階段:將預編譯階段產生的帶編譯原始碼進行語法檢查,編譯成目標檔案(.o型別)
目標檔案中存放定義,部分呼叫使用了其他部分定義的變數和過程,因此還需要第三步:鏈結
鏈結階段主要將各個目標檔案定義和被呼叫處鏈結起來,最終產生可以直接執行的可執行檔案
JS預編譯 函式預編譯和全域性預編譯
預編譯發生在函式執行前一步 建立ao物件 執行期上下文 找形參和變數宣告,將變數和形參名作為ao 屬性名,值為undefined 將實參值和形參統一 在函式體裡面找函式宣告,值賦予函式體 結果 預編譯過程 函式馬上要執行,但是還沒執行 首先建立ao物件,也就是函式它產生的儲存空間庫 ao,b und...
編譯原理 預編譯 編譯 彙編與鏈結
我們編寫的程式 是怎樣執行起來的?到底執行的是什麼內容?平時我們所說的編譯主要包括預編譯 編譯 彙編與鏈結,這四部分分別都幹什麼工作,主要職能有哪些。講述編譯之前,我們先要了解程式記憶體。乙個由c c 編譯的程式占用的記憶體,大致分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式...
預編譯,編譯,彙編,鏈結
2.編譯的工作內容 3.彙編的工作內容 4.鏈結器的工作內容 參考 include int main 使用gcc編譯器 gcc hello.c a.out a.out 含義是 assembler output 即 彙編輸出 上述過程可以分解為四個步驟 1.預處理 prepressing gcc e ...