編譯過程分為4段:
注:現在版本的gcc把預處理和編譯兩個步驟合成乙個步驟,用cc1工具來完成。gcc其實是後台程式的一些包裝,根據不同引數去呼叫其他的實際處理程式,比如:預編譯編譯程式cc1、彙編器as、聯結器ld
1. 預處理
.c —>.i
預處理的過程主要處理包括以下過程:
命令實現:
#用gcc的-e命令實現,引數-e表示只進行預處理
gcc -e *.c > *.i
#或者也可以使用以下指令完成預處理過程
cpp hello.c > hello.i
直接cat hello.i 你就可以看到預處理後的**
2. 編譯
.i —> .s
編譯過程就是把預處理完的檔案進行一系列的詞法分析,語法分析,語義分析及優化後生成相應的彙編**。
命令實現:
#用gcc的-s(大寫)命令實現
gcc -s *.i > *.s
3. 彙編
.s —> .o
彙編器是將彙編**轉變成機器可以執行的命令,每乙個彙編語句幾乎都對應一條機器指令。彙編相對於編譯過程比較簡單,根據彙編指令和機器指令的對照表一一翻譯即可。
命令實現:
#用gcc的-c只編譯不鏈結
gcc -c *.s > *.o
#或者as hello.s –o hello.co
由於hello.o的內容為機器碼,不能以普通文字形式的檢視(vi 開啟看到的是亂碼)。
4. 鏈結
gcc -o hello hello.c
鏈結分為靜態鏈結和動態鏈結
指編譯連線時,把庫檔案的**全部加入到可執行檔案中去,因此生成的檔案比較大,但在執行時也就不需要庫檔案了。
儲存過程知識點!
2011年9月 14日 星期二 一 建立儲存過程 1 基本應用 語法格式 create database create table 儲存函式 每條語句的結束 宣告新的結束符 任選,避免在 mysql 環境下有特殊含義 delimiter 分隔符 delimiter delimiter create ...
C 知識點分享004 理解編譯過程
該文章原創於qter開源社群 www.qter.org 課程目錄 c 老鳥日記 目錄 本套課程屬於 c 跨平台開發乾貨 系列課程。編譯器的基本編譯過程如下 1,讀取工程 讀取並解析工程檔案。一般為makefile或者makefile.debug makefile.release。2,編譯檔案 遍歷解...
a知識點筆記
萬用字元初始化標籤 html,body 容器寬度自適應 width 100 height 100 滑鼠覆蓋狀態 color f40 display inline block 轉換成行級塊元素,div可水平排列,a span定以後方可定義寬高.屬於文字元素,支援父級text align center ...