程式原始碼要執行出結果,需要機器可以識別程式指令,主要進行以下四個步驟:
預處理, 展開標頭檔案/巨集替換/去掉注釋/條件編譯 (test.i main .i)
編譯, 檢查語法,生成彙編 ( test.s main .s)
彙編, 彙編**轉換機器碼 (test.o main.o)
鏈結 鏈結到一起生成可執行程式 a.out
預處理包括展開標頭檔案/巨集替換/去掉注釋/條件編譯:
展開標頭檔案、
處理巨集 - 字元替換、
處理所有的條件編譯指令,比如「#if」、
處理「#include」預編譯指令、
刪除所有的注釋、
新增行號和檔名標識等。
""
表示先從當前目錄搜尋
,然後是系統目錄和path環境變數所列出的目錄下搜尋
所以如果我們知道標頭檔案在系統目錄或者環境變數目錄下時,可以用<>來加快搜尋速度
編譯:包含詞法分析,語法分析,語義分析,和進行優化操作,生成彙編**。
詞法分析作用:找出單詞 。如int a=b+c; 結果為: int,a,=,b,+,c和;
語法分析作用:找出表示式,程式段,語句等。如int a=b=c;的語法分析結果為int a=b+c這條語句。
語義分析作用:檢視型別是否匹配等。
編譯原理(8):**優化_weixin_44226857的部落格-csdn部落格blog.csdn.net
彙編過程:
將彙編**轉換成01機器碼,即.o檔案。.o檔案是純二進位制檔案。因為.o中放的是純二進位制的機器指令。
組合語言和機器語言是一一對應的,每一條彙編語句,基本對應一條機器指令。
彙編指令是機器指令的助記符,彙編指令是更便於記憶的一種書寫格式。它較為有效地解決了機器指令編寫程式難度大的問題,組合語言與人類語言更接近,便於閱讀和記憶。
機器指令: 1000100111011000
彙編指令: mov ax, bx
上述的機器指令和彙編指令是一一對應的,它們操作的含義都是:把暫存器 bx 中的內容送到 ax 中。
組合語言|基礎知識www.jianshu.com
鏈結是將所有的.o檔案和庫(動態庫、靜態庫)鏈結在一起,得到可以執行的可執行檔案(windows的.exe檔案或linux的.out檔案)等。
它的工作就是把一些指令對其他符號位址的引用加以修正。
靜態鏈結是鏈結時候將庫的內容加入到目標可執行程式中的做法,將庫函式和目標檔案鏈結到一起生成乙個可執行檔案。
C C 系統標頭檔案總結
c include 設定插入點 include 字元處理 include 定義錯誤碼 include 浮點數處理 include 檔案輸入 輸出 include 引數化輸入 輸出 include 資料流輸入 輸出 include 定義各種資料型別最值常量 include 定義本地化函式 includ...
c c 標頭檔案中預編譯的作用
在標頭檔案中加入 ifndef或 ifdef等巨集定義,是為了防止重複宣告。我們知道,標頭檔案一般是用來宣告的,會被其他的原始檔和標頭檔案include,當被多個檔案include的時候就會造成重複宣告。為了使得只宣告一次,引入前面所說的巨集定義,一般以檔名大寫和 來當巨集的名字。這個巨集是給預處理...
C C 的標頭檔案
c 傳統 c include 設定插入點 include 字元處理 include 定義錯誤碼 include 浮點數處理 include 檔案輸入 輸出 include 引數化輸入 輸出 include 資料流輸入 輸出 include 定義各種資料型別最值常量 include 定義本地化函式 i...