編譯和預處理相關知識點
GCC
本質:翻譯官,把高級語言翻譯成機器指令
常用選項:
gcc -o 輸出文件名 輸入文件名
gcc -o build 01.c (後綴不能爲其他)
gcc -v -o build 01.c
gcc -l -o 用來指定程序要鏈接的庫,-l參數緊接着就是庫名
gcc -L -o -L參數跟着的是庫文件所在的目錄名
gcc -E -o
gcc -S -o
gcc -c -o
編譯過程
第一步:編譯 gcc -S -o a.s 01.c
第二步:彙編 gcc -c -o a.o a.s
第三步:鏈接 gcc -o build 01.c
預處理
gcc -E -o a.i 01.c生成a.i
常見錯誤
(1)預處理錯誤:找不到,未定義
解決方案:gcc -I ./dir -o build 01.c
(2)編譯錯誤:語法錯誤
(3)鏈接錯誤:原材料不夠(函數未實現)或者原材料多了(多次實現)
解決方案:尋找標籤是否實現或者只保留一個實現
預處理使用
define 宏替換不進行語法檢查
include
預定義宏 FUNCTION LINE FILE
條件編譯(開關) #ifdef #else #endif
提前定義一個宏:gcc -DABC 等價於#define ABC
宏展開下的#和##:
#define ABC(a) #a 字符串
#define DAY(a) myday##a 連接符號