C語言的編譯流程

2021-10-12 15:57:45 字數 798 閱讀 7388

通常我們編譯程式是這樣的

gcc ***.c -o test
這樣這個可執行檔案test就可以直接執行了,編譯器幫我們做的東西太多了

我們需要了解一下這個過程

2、編譯

3、彙編

4、鏈結

把所有的巨集展開

如#define led p0^0

led = 1;

這一步就是將led替換成p0^0

巨集定義可以使得我們**的可閱讀性變強,一定要多用巨集定義

gcc -e main.c > main.i
編譯器將main.c預處理結果輸出 main.i 檔案

#ifdef senyun

#ifden hikcam

#end if

比如做攝像頭的時候

#include

這一步電腦直接將標頭檔案裡的內容直接替換到這個位置

本來是乙個.c檔案,這一步生成彙編檔案.s

gcc -s main.i -o main.s
.c -->.s

將上一步生成的.s檔案翻譯成機器碼(二進位制)

gcc -c main.s -o main.o
生成.o檔案

gcc main.o -o main
最終生成可執行檔案

生成elf檔案和bin檔案

這兩種都是二進位制檔案,並且是都可以直接讀得懂的

最後放在flash上的只有bin檔案

C語言編譯流程全面分析

程式的編譯流程大概分為 預處理器 編譯器 彙編器 鏈結器,4個階段 編譯器又可以分為詞法分析 語法分析 語義分析 中間 生成 優化 生成目標 等階段。預處理器 處理巨集定義,如 include表示引入其他原始檔的 define表示定義巨集,對 片進行乙個替換,if系列命令可以控制預處理器的功能做到面...

c 程式編譯流程

預處理相當於根據預處理指令組裝新的c c 程式。經過預處理,會產生乙個沒有巨集定義,沒有條件編譯指令,沒有特殊符號的輸出檔案,這個檔案的含義同原本的檔案無異,只是內容上有所不同。注意 這個過程可能是遞迴進行的,也就是說被包含的檔案可能還包含其他檔案 以便於編譯時編譯器產生除錯用的行號資訊及用於編譯時...

C 編譯器的函式編譯流程

c 中的型別查詢過程相對簡單,基本上就是名字查詢,這裡不再介紹。對於 cpp 檔案中呼叫的乙個函式 或成員函式 編譯器主要做了下面三件事情 1 名字查詢 先在所在編譯單元中可見名字實體中進行名字查詢 1 類成員函式優先 物件所在的類 基類 一 經找到就停止查詢 2 如果沒有 在相應的名字空間中做進一...