C語言從代碼變成可執(zhí)行程序的步驟:
預(yù)處理?----->?編譯?----->?匯編?----->?鏈接
⒈預(yù)處理:去掉注釋,加載頭文件,代替宏定義,條件編譯
需要文件:.c文件
生成產(chǎn)物:預(yù)處理文件(以.i結(jié)尾)
使用方法:gcc hello.c -E -o hello.i
可以使用vim打開預(yù)處理文件來查看生成產(chǎn)物
⒉編譯:使用編譯器進行C語言的語法檢查,如果有語法錯誤,報錯,并結(jié)束編譯過程;如果沒有語法錯誤,把C的源程序轉(zhuǎn)變?yōu)閰R編代碼;
需要文件:.i文件
生成產(chǎn)物:匯編文件(以.s結(jié)尾)
使用方法:gcc hello.i -S -o hello.s
可以使用vim打開匯編文件來查看生成產(chǎn)物
⒊匯編:把匯編源文件通過匯編器生成目標(biāo)文件(二進制機器語言)
需要文件:.s文件
生成產(chǎn)物:機器碼(或稱為“目標(biāo)代碼”,以.o結(jié)尾)
使用方法:gcc hello.s -c -o hello.o
可以使用vim打開目標(biāo)代碼文件來查看生成產(chǎn)物(不過只會看到亂碼)
⒋鏈接:把目標(biāo)文件執(zhí)行所依賴的所有二進制的其他目標(biāo)文件及C的庫文件都整合成一個可執(zhí)行文件的過程;
需要文件:.o文件及各種動態(tài)庫或靜態(tài)庫
生成產(chǎn)物:可執(zhí)行程序
使用方法:gcc hello.o -o hello
-o:指定生成的產(chǎn)物的名字
-Wall:讓編譯器報告全部錯誤
我們要養(yǎng)成良好習(xí)慣,在編譯過程中添加-o指定生成產(chǎn)物名稱,添加-Wall報告所有的error和warning方便我們調(diào)試程序。完整的編譯指令如下:
gcc hello.c -o hello -Wall
?
編譯完成后(無error,無warning),會生成-o之后的文件(如沒有加-o則會生成a.out文件)
執(zhí)行文件:
./hello(./a.out)
1、#define?在預(yù)處理階段
???typedef?在編譯階段
2、和shell編程一樣
C語言的main(int argc, const char *argv[])中兩個參數(shù)分別代表命令行參數(shù)個數(shù),和存放參數(shù)的指針常量數(shù)組