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