c 標頭檔案加入系統 C C 編譯的過程

2021-10-13 18:04:56 字數 1472 閱讀 2133

程式原始碼要執行出結果,需要機器可以識別程式指令,主要進行以下四個步驟:

預處理, 展開標頭檔案/巨集替換/去掉注釋/條件編譯 (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...