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