標籤:使用 檔案 io 代碼 c++ c
GNU C Compiler 多平台編譯器,是GNU的代表作之一。
GCC編譯器可以編譯連結C\C++\彙編成可執行檔,可執行檔沒特殊尾碼,看屬性。
預先處理 編譯 彙編 連結
Gcc通過尾碼來區分不同類型檔案
.c C語言原始碼檔案
.a庫檔案 由目標檔案構成的庫檔案
.C .cc .cxx C++原始碼檔案
.h 標頭檔
.i 已經預先處理過的C原始碼檔案
.ii 已經預先處理過的C++原始碼檔案
.o 編譯後的目標檔案
.s 組合語言原始碼檔案
.S 經過先行編譯的組合語言原始碼檔案
預先處理:把宏展開
-o 指定輸出的可執行檔的檔案名稱,如果沒有,則預設輸出檔案名字為:a.out。 gcc hello.c -o hello
-c 只編譯,不串連成為可執行檔,編譯器只是由輸入的.c等源檔案代碼,產生.o為尾碼的目標檔案。 gcc -c hello.c
-g產生調試工具(GNU的gdb)所必要的符號資訊,要想對編譯出的程式進行調試,就必須加入這個選項。 gcc -g hello.c -o hello
-O -O2:對程式進行最佳化,後面的最佳化程度更深。
gcc optimize.c -o optimize
time ./optimize
gcc -O optimize.c -o optimize
time ./optimize
對比兩種,最佳化後,明顯變好。
-Idirname:將dirname所指出的目錄加入到程式標頭檔目錄列表中。
C程式中的標頭檔包含兩種情況:
#include <A.h>
#include "B.h"
對於<>,預先處理程式cpp在系統預設的標頭檔目錄(/usr/include)中搜尋相應的檔案;
對於“”,cpp在目前的目錄中搜尋標頭檔。如果在目前的目錄中沒有找到需要的檔案,就到指定的dirname目錄中去尋找。
例如: gcc foo.c -I/home/include -o foo
-Ldirname:將dirname所指出的目錄加入到庫檔案的目錄列表中。在預設狀態下,串連程式ld在系統的預設路徑中(如/usr/lib)尋找所需要的庫檔案,這個選項告訴串連程式,首先到-L指定的目錄中去尋找,然後再到系統預設路徑中尋找。
-lname 在串連時,裝載名字為“libname.a”的函數庫,該函數庫位於系統預設的目錄或者由-L選項確定的目錄下。例如,-lm表示串連名為libm.a的數學函數庫。
例:gcc foo.c -L/home/lib -lfoo -o foo
-static :靜態串連庫檔案
預設是動態連結。
編譯選項:
-Wall :產生所有警告資訊
-w : 不產生任何警告
-DMACRO:-DYES:相當於在程式中使用#define YES
#include <stdio.h>
//#define YES
void main()
{
#ifdef YES
printf("hello");
#endif
}
運行命令:
gcc -DYES hello.c -o hello
./hello
則,可以輸出hello。