通常我們編譯程式是這樣的
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 如果沒有 在相應的名字空間中做進一...