引子
gcc and g++分別是gnu的c & c++編譯器柑土。gcc/g++在執(zhí)行編譯工作的時(shí)候艘包,總共需要4步
1.預(yù)處理,生成.i的文件[預(yù)處理器cpp]
2.將預(yù)處理后的文件轉(zhuǎn)換成匯編語(yǔ)言,生成文件.s[編譯器egcs]
3.有匯編變?yōu)槟繕?biāo)代碼(機(jī)器代碼)生成.o的文件[匯編器as]
4.連接目標(biāo)代碼,生成可執(zhí)行程序[鏈接器ld]
gcc 命令的常用選項(xiàng)
-ansi:只支持 ANSI 標(biāo)準(zhǔn)的 C 語(yǔ)法蓄氧。這一選項(xiàng)將禁止 GNU C 的某些特色,例如 asm 或 typeof 關(guān)鍵詞咒唆。
-c:只編譯并生成目標(biāo)文件硼补。
-DMACRO:以字符串“1”定義 MACRO 宏。
-DMACRO=DEFN:以字符串“DEFN”定義 MACRO 宏拇勃。
-E:只運(yùn)行 C 預(yù)編譯器四苇。
-g:生成調(diào)試信息。GNU 調(diào)試器可利用該信息方咆。
-IDIRECTORY: 指定額外的頭文件搜索路徑DIRECTORY月腋。
-LDIRECTORY: 指定額外的函數(shù)庫(kù)搜索路徑DIRECTORY。
-lLIBRARY:連接時(shí)搜索指定的函數(shù)庫(kù)LIBRARY瓣赂。
-m486:針對(duì) 486 進(jìn)行代碼優(yōu)化榆骚。
-o FILE: 生成指定的輸出文件。用在生成可執(zhí)行文件時(shí)煌集。
-O0: 不進(jìn)行優(yōu)化處理妓肢。
-O /-O1: 優(yōu)化生成代碼。
-O2: 進(jìn)一步優(yōu)化牙勘。
-O3: 比 -O2 更進(jìn)一步優(yōu)化职恳,包括 inline 函數(shù)。
-shared: 生成共享目標(biāo)文件方面。通常用在建立共享庫(kù)時(shí)放钦。
-static: 禁止使用共享連接。
-UMACRO: 取消對(duì) MACRO 宏的定義恭金。
-w: 不生成任何警告信息操禀。
-Wall: 生成所有警告信息。
參數(shù)詳解
-x language filename
設(shè)定文件所使用的語(yǔ)言,使后綴名無(wú)效,對(duì)以后的多個(gè)有效.也就是根據(jù)約定C語(yǔ)言的后綴名稱是.c的横腿,而C++的后綴名是.C或者.cpp,如果你很個(gè)性颓屑,決定你的C代碼文件的后綴名是.pig 哈哈,那你就要用這個(gè)參數(shù),這個(gè)參數(shù)對(duì)他后面的文件名都起作用耿焊,除非到了下一個(gè)參數(shù)的使用揪惦。以使用的參數(shù)嗎有下面的這些
c, objective-c, c-header, c++, cpp-output, assembler, and a
ssembler-with-cpp`.
例子用法:gcc -x c hello.pig
-x none filename
關(guān)掉上一個(gè)選項(xiàng),也就是讓gcc根據(jù)文件名后綴罗侯,自動(dòng)識(shí)別文件類型
例子用法:gcc -x c hello.pig -x none hello2.c
-c
只激活預(yù)處理,編譯,和匯編,也就是他只把程序做成obj文件
例子用法:gcc -c hello.c
-S
只激活預(yù)處理和編譯器腋,就是指把文件編譯成為匯編代碼。
例子用法:gcc -S hello.c
-E
只激活預(yù)處理,這個(gè)不生成文件,你需要把它重定向到一個(gè)輸出文件里面.
例子用法:
gcc -E hello.c > pianoapan.txt
gcc -E hello.c | more
-o
制定目標(biāo)名稱,缺省的時(shí)候,gcc 編譯出來(lái)的文件是a.out,
例子用法
gcc -o hello.exe hello.c (哦,windows用習(xí)慣了)
gcc -o hello.asm -S hello.c
-pipe
使用管道代替編譯中臨時(shí)文件,在使用非gnu匯編工具的時(shí)候,可能有些問題
gcc -pipe -o hello.exe hello.c
-ansi
關(guān)閉gnu c中與ansi c不兼容的特性,激活ansi c的專有特性(包括禁止一些asm inline typeof關(guān)鍵字,以及UNIX,vax等預(yù)處理宏,
-fno-asm
此選項(xiàng)實(shí)現(xiàn)ansi選項(xiàng)的功能的一部分,它禁止將asm,inline和typeof用作關(guān)鍵字纫塌≌锵兀
-fno-strict-prototype
只對(duì)g++起作用,使用這個(gè)選項(xiàng),g++將對(duì)不帶參數(shù)的函數(shù),都認(rèn)為是沒有顯式的對(duì)參數(shù)的個(gè)數(shù)和類型說(shuō)明,而不是沒有參數(shù).而gcc無(wú)論是否使用這個(gè)參數(shù),都將對(duì)沒有帶參數(shù)的函數(shù),認(rèn)為城沒有顯式說(shuō)明的類型
-fthis-is-varialble
就是向傳統(tǒng)c++看齊,可以使用this當(dāng)一般變量使用.
-fcond-mismatch
允許條件表達(dá)式的第二和第三參數(shù)類型不匹配,表達(dá)式的值將為void類型
-funsigned-char
-fno-signed-char
-fsigned-char
-fno-unsigned-char
這四個(gè)參數(shù)是對(duì)char類型進(jìn)行設(shè)置,決定將char類型設(shè)置成unsigned char(前兩個(gè)參數(shù))或者 signed char(后兩個(gè)參數(shù))
-include file
包含某個(gè)代碼,簡(jiǎn)單來(lái)說(shuō),就是便以某個(gè)文件,需要另一個(gè)文件的時(shí)候,就可以用它設(shè)定,功能就相當(dāng)于在代碼中使用#include
例子用法:gcc hello.c -include /root/pianopan.h
-imacros file
將file文件的宏,擴(kuò)展到gcc/g++的輸入文件,宏定義本身并不出現(xiàn)在輸入文件中
-Dmacro:相當(dāng)于C語(yǔ)言中的#define macro
-Dmacro=defn:相當(dāng)于C語(yǔ)言中的#define macro=defn
-Umacro:相當(dāng)于C語(yǔ)言中的#undef macro
-undef:取消對(duì)任何非標(biāo)準(zhǔn)宏的定義
-Idir
在你是用#include"file"的時(shí)候,gcc/g++會(huì)先在當(dāng)前目錄查找你所制定的頭文件,如果沒有找到,他回到缺省的頭文件目錄找,如果使用-I制定了目錄,他回先在你所制定的目錄查找,然后再按常規(guī)的順序去找.對(duì)于#include,gcc/g++會(huì)到-I制定的目錄查找,查找不到,然后將到系統(tǒng)的缺省的頭文件目錄查找
-I-:就是取消前一個(gè)參數(shù)的功能,所以一般在-Idir之后使用
-idirafter dir:在-I的目錄里面查找失敗,講到這個(gè)目錄里面查找.
-iprefix prefix
-iwithprefix dir
一般一起使用,當(dāng)-I的目錄查找失敗,會(huì)到prefix+dir下查找
-nostdinc
使編譯器不再系統(tǒng)缺省的頭文件目錄里面找頭文件,一般和-I聯(lián)合使用,明確限定頭文件的位置
-nostdin C++
規(guī)定不在g++指定的標(biāo)準(zhǔn)路經(jīng)中搜索,但仍在其他路徑中搜索,.此選項(xiàng)在創(chuàng)libg++庫(kù)
使用
-C
在預(yù)處理的時(shí)候,不刪除注釋信息,一般和-E使用,有時(shí)候分析程序,用這個(gè)很方便的
-M
生成文件關(guān)聯(lián)的信息措左。包含目標(biāo)文件所依賴的所有源代碼
-MM
和上面的那個(gè)一樣依痊,但是它將忽略由#include造成的依賴關(guān)系
-MD
和-M相同,但是輸出將導(dǎo)入到.d的文件里面
-MMD
和-MM相同怎披,但是輸出將導(dǎo)入到.d的文件里面
-Wa,option
此選項(xiàng)傳遞option給匯編程序;如果option中間有逗號(hào),就將option分成多個(gè)選項(xiàng),然后傳遞給會(huì)匯編程序
-Wl.option
此選項(xiàng)傳遞option給連接程序;如果option中間有逗號(hào),就將option分成多個(gè)選項(xiàng),然后傳遞給會(huì)連接程序.
-llibrary
制定編譯的時(shí)候使用的庫(kù)
例子用法:gcc -lcurses hello.c
使用ncurses庫(kù)編譯程序
-Ldir
制定編譯的時(shí)候胸嘁,搜索庫(kù)的路徑。比如你自己的庫(kù)凉逛,可以用它制定目錄缴渊,不然編譯器將只在標(biāo)準(zhǔn)庫(kù)的目錄找。這個(gè)dir就是目錄的名稱鱼炒。
-O0
-O1
-O2
-O3
編譯器的優(yōu)化選項(xiàng)的4個(gè)級(jí)別,-O0表示沒有優(yōu)化,-O1為缺省值蝌借,-O3優(yōu)化級(jí)別最高
-g
只是編譯器昔瞧,在編譯的時(shí)候,產(chǎn)生調(diào)試信息菩佑。
-gstabs
此選項(xiàng)以stabs格式聲稱調(diào)試信息,但是不包括gdb調(diào)試信息.
-gstabs+
此選項(xiàng)以stabs格式聲稱調(diào)試信息,并且包含僅供gdb使用的額外調(diào)試信息.
-ggdb
此選項(xiàng)將盡可能的生成gdb的可以使用的調(diào)試信息.
-static
此選項(xiàng)將禁止使用動(dòng)態(tài)庫(kù)自晰,所以,編譯出來(lái)的東西稍坯,一般都很大酬荞,也不需要什么動(dòng)態(tài)連接庫(kù),就可以運(yùn)行.
-share:此選項(xiàng)將盡量使用動(dòng)態(tài)庫(kù)瞧哟,所以生成文件比較小混巧,但是需要系統(tǒng)由動(dòng)態(tài)庫(kù).
-traditional:試圖讓編譯器支持傳統(tǒng)的C語(yǔ)言特性
警告信息控制選項(xiàng)
--all-warnings 此開關(guān)缺少可用文檔
--extra-warnings 此開關(guān)缺少可用文檔
-W 不建議使用此開關(guān);請(qǐng)改用 -Wextra
-Wabi 當(dāng)結(jié)果與 ABI相容的編譯器的編譯結(jié)果不同時(shí)給出警告
-Waddress 使用可疑的內(nèi)存地址時(shí)給出警告
-Waggregate-return 當(dāng)返回結(jié)構(gòu)勤揩、聯(lián)合或數(shù)組時(shí)給出警告
-Waliasing 為可能的虛參重疊給出警告
-Walign-commons 對(duì) COMMON 塊對(duì)齊的警告
-Wall 啟用大部分警告信息
-Wampersand 若延續(xù)字符常量中缺少 & 則給出警告
-Warray-bounds 當(dāng)數(shù)組訪問越界時(shí)給出警告
-Warray-temporaries 創(chuàng)建臨時(shí)數(shù)組時(shí)給出警告
-Wassign-intercept 當(dāng) Objective-C賦值可能為垃圾回收所介入時(shí)給出警告
-Wattributes 當(dāng)對(duì)屬性的使用不合適時(shí)給出警告
-Wbad-function-cast 當(dāng)把函數(shù)轉(zhuǎn)換為不兼容類型時(shí)給出警告
-Wbuiltin-macro-redefined 當(dāng)內(nèi)建預(yù)處理宏未定義或重定義時(shí)給出警告
-Wc++-compat 當(dāng)在 C 語(yǔ)言中使用了 C 與 C++交集以外的構(gòu)造時(shí)給出警告
-Wc++0x-compat 當(dāng) C++ 構(gòu)造的意義在 ISO C++ 1998 和 ISOC++ 200x 中不同時(shí)給出警告
-Wcast-align 當(dāng)轉(zhuǎn)換指針類型導(dǎo)致對(duì)齊邊界增長(zhǎng)時(shí)給出警告
-Wcast-qual 當(dāng)類型轉(zhuǎn)換丟失限定信息時(shí)給出警告
-Wchar-subscripts 當(dāng)下標(biāo)類型為“char”時(shí)給出警告
-Wcharacter-truncation 對(duì)被截?cái)嗟淖址磉_(dá)式給出警告
-Wclobbered 對(duì)能為"longjmp"或"vfork"所篡改的變量給出警告
-Wcomment 對(duì)可能嵌套的注釋和長(zhǎng)度超過一個(gè)物理行長(zhǎng)的C++ 注釋給出警告
-Wcomments -Wcomment 的同義詞
-Wconversion 當(dāng)隱式類型轉(zhuǎn)換可能改變值時(shí)給出警告
-Wconversion-extra 對(duì)大多數(shù)隱式類型轉(zhuǎn)換給出警告
-Wconversion-null 將 NULL 轉(zhuǎn)換為非指針類型時(shí)給出警告
-Wcoverage-mismatch Warn in case profiles in -fprofile-use do not match
-Wcpp Warn when a #warning directive is encountered
-Wctor-dtor-privacy 當(dāng)所有構(gòu)造函數(shù)和析構(gòu)函數(shù)都是私有時(shí)給出警告
-Wdeclaration-after-statement 當(dāng)聲明出現(xiàn)在語(yǔ)句后時(shí)給出警告
-Wdeprecated 使用不建議的編譯器特性咧党、類、方法或字段時(shí)給出警告
-Wdeprecated-declarations 對(duì) attribute((deprecated)) 聲明給出警告
-Wdisabled-optimization 當(dāng)某趟優(yōu)化被禁用時(shí)給出警告
-Wdiv-by-zero 對(duì)編譯時(shí)發(fā)現(xiàn)的零除給出警告
-Wdouble-promotion 對(duì)從“float”到“double”的隱式轉(zhuǎn)換給出警告
-Weffc++ 對(duì)不遵循《Effetive C++》的風(fēng)格給出警告
-Wempty-body 當(dāng) if 或 else 語(yǔ)句體為空時(shí)給出警告
-Wendif-labels 當(dāng) #elif 和 #endif后面跟有其他標(biāo)識(shí)符時(shí)給出警告
-Wenum-compare 對(duì)不同枚舉類型之間的比較給出警告
-Werror-implicit-function-declaration 不建議使用此開關(guān)陨亡;請(qǐng)改用
-Werror=implicit-function-declaration
-Wextra 打印額外(可能您并不想要)的警告信息
-Wfloat-equal 當(dāng)比較浮點(diǎn)數(shù)是否相等時(shí)給出警告
-Wformat 對(duì) printf/scanf/strftime/strfmon中的格式字符串異常給出警告
-Wformat-contains-nul 當(dāng)格式字符串包含 NUL 字節(jié)時(shí)給出警告
-Wformat-extra-args 當(dāng)傳遞給格式字符串的參數(shù)太多時(shí)給出警告
-Wformat-nonliteral 當(dāng)格式字符串不是字面值時(shí)給出警告
-Wformat-security 當(dāng)使用格式字符串的函數(shù)可能導(dǎo)致安全問題時(shí)給出警告
-Wformat-y2k 當(dāng) strftime 格式給出 2位記年時(shí)給出警告
-Wformat-zero-length 對(duì)長(zhǎng)度為 0 的格式字符串給出警告
-Wformat= 此開關(guān)缺少可用文檔
-Wignored-qualifiers 當(dāng)類型限定符被忽略時(shí)給出警告傍衡。
-Wimplicit 對(duì)隱式函數(shù)聲明給出警告
-Wimplicit-function-declaration 對(duì)隱式函數(shù)聲明給出警告
-Wimplicit-int 當(dāng)聲明未指定類型時(shí)給出警告
-Wimplicit-interface 對(duì)帶有隱式接口的調(diào)用給出警告
-Wimplicit-procedure 對(duì)沒有隱式聲明的過程調(diào)用給出警告
-Winit-self 對(duì)初始化為自身的變量給出警告。
-Winline 當(dāng)內(nèi)聯(lián)函數(shù)無(wú)法被內(nèi)聯(lián)時(shí)給出警告
-Wint-to-pointer-cast 當(dāng)將一個(gè)大小不同的整數(shù)轉(zhuǎn)換為指針時(shí)給出警告
-Wintrinsic-shadow 如果用戶過程有與內(nèi)建過程相同的名字則警告
-Wintrinsics-std 當(dāng)內(nèi)建函數(shù)不是所選標(biāo)準(zhǔn)的一部分時(shí)給出警告
-Winvalid-offsetof 對(duì)“offsetof”宏無(wú)效的使用給出警告
-Winvalid-pch 在找到了 PCH文件但未使用的情況給出警告
-Wjump-misses-init 當(dāng)跳轉(zhuǎn)略過變量初始化時(shí)給出警告
-Wlarger-than- 此開關(guān)缺少可用文檔
-Wlarger-than= 當(dāng)目標(biāo)文件大于 N 字節(jié)時(shí)給出警告
-Wline-truncation 對(duì)被截?cái)嗟脑次募薪o出警告
-Wlogical-op 當(dāng)邏輯操作結(jié)果似乎總為真或假時(shí)給出警告
-Wlong-long 當(dāng)使用 -pedantic 時(shí)不對(duì)“l(fā)ong long”給出警告
-Wmain 對(duì)可疑的“main”聲明給出警告
-Wmissing-braces 若初始值設(shè)定項(xiàng)中可能缺少花括號(hào)則給出警告
-Wmissing-declarations 當(dāng)全局函數(shù)沒有前向聲明時(shí)給出警告
-Wmissing-field-initializers 若結(jié)構(gòu)初始值設(shè)定項(xiàng)中缺少字段則給出警告
-Wmissing-format-attribute 當(dāng)函數(shù)可能是 format屬性的備選時(shí)給出警告
-Wmissing-include-dirs 當(dāng)用戶給定的包含目錄不存在時(shí)給出警告
-Wmissing-noreturn 當(dāng)函數(shù)可能是 attribute((noreturn))的備選時(shí)給出警告
-Wmissing-parameter-type K&R 風(fēng)格函數(shù)參數(shù)聲明中未指定類型限定符時(shí)給出警告
-Wmissing-prototypes 全局函數(shù)沒有原型時(shí)給出警告
-Wmudflap 當(dāng)構(gòu)造未被 -fmudflap 處理時(shí)給出警告
-Wmultichar 使用多字節(jié)字符集的字符常量時(shí)給出警告
-Wnested-externs 當(dāng)“extern”聲明不在文件作用域時(shí)給出警告
-Wnoexcept Warn when a noexcept expression evaluates to false even though the expression can't actually throw
-Wnon-template-friend 在模板內(nèi)聲明未模板化的友元函數(shù)時(shí)給出警告
-Wnon-virtual-dtor 當(dāng)析構(gòu)函數(shù)不是虛函數(shù)時(shí)給出警告
-Wnonnull 當(dāng)將 NULL 傳遞給需要非 NULL 的參數(shù)的函數(shù)時(shí)給出警告
-Wnormalized=<id|nfc|nfkc> 對(duì)未歸一化的 Unicode 字符串給出警告
-Wold-style-cast 程序使用 C 風(fēng)格的類型轉(zhuǎn)換時(shí)給出警告
-Wold-style-declaration 對(duì)聲明中的過時(shí)用法給出警告
-Wold-style-definition 使用舊式形參定義時(shí)給出警告
-Woverflow 算術(shù)表示式溢出時(shí)給出警告
-Woverlength-strings 當(dāng)字符串長(zhǎng)度超過標(biāo)準(zhǔn)規(guī)定的可移植的最大長(zhǎng)度時(shí)給出警告
-Woverloaded-virtual 重載虛函數(shù)名時(shí)給出警告
-Woverride-init 覆蓋無(wú)副作用的初始值設(shè)定時(shí)給出警告
-Wpacked 當(dāng) packed 屬性對(duì)結(jié)構(gòu)布局不起作用時(shí)給出警告
-Wpacked-bitfield-compat 當(dāng)緊實(shí)位段的偏移量因 GCC 4.4 而改變時(shí)給出警告
-Wpadded 當(dāng)需要填補(bǔ)才能對(duì)齊結(jié)構(gòu)成員時(shí)給出警告
-Wparentheses 可能缺少括號(hào)的情況下給出警告
-Wpmf-conversions 當(dāng)改變成員函數(shù)指針的類型時(shí)給出警告
-Wpointer-arith 當(dāng)在算術(shù)表達(dá)式中使用函數(shù)指針時(shí)給出警告
-Wpointer-sign 賦值時(shí)如指針符號(hào)不一致則給出警告
-Wpointer-to-int-cast 將一個(gè)指針轉(zhuǎn)換為大小不同的整數(shù)時(shí)給出警告
-Wpragmas 對(duì)錯(cuò)誤使用的 pragma 加以警告
-Wproperty-assign-default Warn if a property for an Objective-C object has
no assign semantics specified
-Wprotocol 當(dāng)繼承來(lái)的方法未被實(shí)現(xiàn)時(shí)給出警告
-Wreal-q-constant Warn about real-literal-constants with 'q'
exponent-letter
-Wredundant-decls 對(duì)同一個(gè)對(duì)象多次聲明時(shí)給出警告
-Wreorder 編譯器將代碼重新排序時(shí)給出警告
-Wreturn-type 當(dāng) C 函數(shù)的返回值默認(rèn)為“int”负蠕,或者 C++函數(shù)的返回類型不一致時(shí)給出警告
-Wselector 當(dāng)選擇子有多個(gè)方法時(shí)給出警告
-Wsequence-point 當(dāng)可能違反定序點(diǎn)規(guī)則時(shí)給出警告
-Wshadow 當(dāng)一個(gè)局部變量掩蓋了另一個(gè)局部變量時(shí)給出警告
-Wsign-compare 在有符號(hào)和無(wú)符號(hào)數(shù)間進(jìn)行比較時(shí)給出警告
-Wsign-promo 當(dāng)重載將無(wú)符號(hào)數(shù)提升為有符號(hào)數(shù)時(shí)給出警告
-Wstack-protector 當(dāng)因?yàn)槟撤N原因堆棧保護(hù)失效時(shí)給出警告
-Wstrict-aliasing 當(dāng)代碼可能破壞強(qiáng)重疊規(guī)則時(shí)給出警告
-Wstrict-aliasing= 當(dāng)代碼可能破壞強(qiáng)重疊規(guī)則時(shí)給出警告
-Wstrict-null-sentinel 將未作轉(zhuǎn)換的 NULL 用作哨兵時(shí)給出警告
-Wstrict-overflow 禁用假定有符號(hào)數(shù)溢出行為未被定義的優(yōu)化
-Wstrict-overflow= 禁用假定有符號(hào)數(shù)溢出行為未被定義的優(yōu)化
-Wstrict-prototypes 使用了非原型的函數(shù)聲明時(shí)給出警告
-Wstrict-selector-match 當(dāng)備選方法的類型簽字不完全匹配時(shí)給出警告
-Wsuggest-attribute=const Warn about functions which might be candidates
for attribute((const))
-Wsuggest-attribute=noreturn 當(dāng)函數(shù)可能是 attribute((noreturn)) 的備選時(shí)給出警告
-Wsuggest-attribute=pure Warn about functions which might be candidates
for attribute((pure))
-Wsurprising 對(duì)“可疑”的構(gòu)造給出警告
-Wswitch 當(dāng)使用枚舉類型作為開關(guān)變量蛙埂,沒有提供default 分支,但又缺少某個(gè) case 時(shí)給出警告
-Wswitch-default 當(dāng)使用枚舉類型作為開關(guān)變量遮糖,但沒有提供“default”分支時(shí)給出警告
-Wswitch-enum 當(dāng)使用枚舉類型作為開關(guān)變量但又缺少某個(gè) case 時(shí)給出警告
-Wsync-nand 當(dāng) __sync_fetch_and_nand 和 __sync_nand_and_fetch
內(nèi)建函數(shù)被使用時(shí)給出警告
-Wsynth 不建議使用绣的。此開關(guān)不起作用。
-Wsystem-headers 不抑制系統(tǒng)頭文件中的警告
-Wtabs 允許使用不符合規(guī)范的制表符
-Wtraditional 使用了傳統(tǒng) C 不支持的特性時(shí)給出警告
-Wtraditional-conversion 原型導(dǎo)致的類型轉(zhuǎn)換與無(wú)原型時(shí)的類型轉(zhuǎn)換不同時(shí)給出警告
-Wtrampolines Warn whenever a trampoline is generated
-Wtrigraphs 當(dāng)三字母序列可能影響程序意義時(shí)給出警告
-Wtype-limits 當(dāng)由于數(shù)據(jù)類型范圍限制比較結(jié)果永遠(yuǎn)為真或假時(shí)給出警告
-Wundeclared-selector 當(dāng)使用 @selector() 卻不作事先聲明時(shí)給出警告
-Wundef 當(dāng) #if指令中用到未定義的宏時(shí)給出警告
-Wunderflow 數(shù)字常量表達(dá)式下溢時(shí)警告
-Wuninitialized 自動(dòng)變量未初始化時(shí)警告
-Wunknown-pragmas 對(duì)無(wú)法識(shí)別的 pragma 加以警告
-Wunsafe-loop-optimizations 當(dāng)循環(huán)因?yàn)椴黄椒驳募俣ǘ荒鼙粌?yōu)化時(shí)給出警告
-Wunsuffixed-float-constants 對(duì)不帶后綴的浮點(diǎn)常量給出警告
-Wunused 啟用所有關(guān)于“XX未使用”的警告
-Wunused-but-set-parameter Warn when a function parameter is only set,
otherwise unused
-Wunused-but-set-variable Warn when a variable is only set, otherwise unused
-Wunused-dummy-argument 對(duì)未使用的啞元給出警告。
-Wunused-function 有未使用的函數(shù)時(shí)警告
-Wunused-label 有未使用的標(biāo)號(hào)時(shí)警告
-Wunused-macros 當(dāng)定義在主文件中的宏未被使用時(shí)給出警告
-Wunused-parameter 發(fā)現(xiàn)未使用的函數(shù)指針時(shí)給出警告
-Wunused-result 當(dāng)一個(gè)帶有 warn_unused_result 屬性的函數(shù)的調(diào)用者未使用前者的返回值時(shí)給出警告
-Wunused-value 當(dāng)一個(gè)表達(dá)式的值未被使用時(shí)給出警告
-Wunused-variable 有未使用的變量時(shí)警告
-Wvariadic-macros 指定 -pedantic 時(shí)不為可變參數(shù)宏給出警告
-Wvla 使用變長(zhǎng)數(shù)組時(shí)警告
-Wvolatile-register-var 當(dāng)一個(gè)寄存器變量被聲明為 volatile 時(shí)給出警告
-Wwrite-strings 在 C++中被辑,非零值表示將字面字符串轉(zhuǎn)換為‘char*’時(shí)給出警告燎悍。在 C中,給出相似的警告盼理,但這種類型轉(zhuǎn)換是符合ISO C 標(biāo)準(zhǔn)的谈山。
-frequire-return-statement Functions which return values must end with
return statements
其他編譯選項(xiàng)
-o 設(shè)定輸出文件名
-c 只編譯,不連接.
-E 只做預(yù)編譯.
-pipe 在多個(gè)編譯過程之間使用管道.
--version 顯示版本.
-static 靜態(tài)連接.
-ansi C 模式下支持所有 ISO C90 標(biāo)準(zhǔn)的 C 程序, C++ 模式下去除對(duì) GNU C++ 擴(kuò)展的支持(GNU擴(kuò)展會(huì)與 ISO C++ 沖突)
-std= 確定編譯語(yǔ)言的標(biāo)準(zhǔn),目前只在編譯 C 和 C++ 時(shí)有效 -fno-asm 不將 "asm" "inline" "typeof" 作為關(guān)鍵字,可以用他們做變量名等. -funsigned-char 將"char"的數(shù)據(jù)類型設(shè)為"unsigned",即無(wú)符號(hào).
-fsigned-char 正好相反,將"char"設(shè)為"signed".
-fsyntax-only 只檢查語(yǔ)法錯(cuò)誤,不做其他任何事.
-pedantic 顯示所有的 ISO C 和 ISO C++ 的警告,并且拒絕所有使用禁止擴(kuò)展的程序
-Wall 顯示所有警告
-g 將編譯時(shí)的調(diào)試信息保存到本地文件中( stabs,COFF,XCOFF,DWARF)
-ggdb 為 GDB 產(chǎn)生調(diào)試信息,包含 GDB 的擴(kuò)展.
-ggdb(level) 設(shè)定產(chǎn)生何種等級(jí)的調(diào)試信息, level 為 1-3, 1 最少,3 最多.
-ftime-reprot 統(tǒng)計(jì)編譯消耗的時(shí)間并顯示報(bào)告.
-fmem-report 顯示所有的靜態(tài)內(nèi)存分配.
-ftest-coverages 為 gcov工具產(chǎn)生數(shù)據(jù)文件.
gcc 編譯選項(xiàng)
優(yōu)化
-O1 最小化空間 minimize space
-Op[-] 改善浮點(diǎn)數(shù)一致性 improve floating-pt consistency
-O2 最大化速度 maximize speed
-Os 優(yōu)選代碼空間 favor code space
-Oa 假設(shè)沒有別名 assume no aliasing
-Ot 優(yōu)選代碼速度 favor code speed
-Ob 內(nèi)聯(lián)展開(默認(rèn) n=0) inline expansion (default n=0)
-Ow 假設(shè)交叉函數(shù)別名 assume cross-function aliasing
-Od 禁用優(yōu)化(默認(rèn)值) disable optimizations (default)
-Ox 最大化選項(xiàng)。(-Ogityb2 -Gs) maximum opts. (-Ogityb1 -Gs)
-Og 啟用全局優(yōu)化 enable global optimization
-Oy[-] 啟用框架指針省略 enable frame pointer omission
-Oi 啟用內(nèi)建函數(shù) enable intrinsic functions
代碼生成
-G3 為 80386 進(jìn)行優(yōu)化 optimize for 80386
-G4 為 80486 進(jìn)行優(yōu)化 optimize for 80486
-GR[-] 啟用 C++ RTTI enable C++ RTTI
-G5 為 Pentium 進(jìn)行優(yōu)化 optimize for Pentium
-G6 為 Pentium Pro 進(jìn)行優(yōu)化 optimize for Pentium Pro
-GX[-] 啟用 C++ 異常處理(與 -EHsc 相同) enable C++ EH (same as -EHsc)
-EHs 啟用同步 C++ 異常處理 enable synchronous C++ EH
-GD 為 Windows DLL 進(jìn)行優(yōu)化 optimize for Windows DLL
-GB 為混合模型進(jìn)行優(yōu)化(默認(rèn)) optimize for blended model (default)
-EHa 啟用異步 C++ 異常處理 enable asynchronous C++ EH
-Gd __cdecl 調(diào)用約定 __cdecl calling convention
-EHc extern“C”默認(rèn)為 nothrow extern "C" defaults to nothrow
-Gr __fastcall 調(diào)用約定 __fastcall calling convention
-Gi[-] 啟用增量編譯 enable incremental compilation
-Gz __stdcall 調(diào)用約定 __stdcall calling convention
-Gm[-] 啟用最小重新生成 enable minimal rebuild
-GA 為 Windows 應(yīng)用程序進(jìn)行優(yōu)化 optimize for Windows Application
-Gf 啟用字符串池 enable string pooling
-QIfdiv[-] 啟用 Pentium FDIV 修復(fù) enable Pentium FDIV fix
-GF 啟用只讀字符串池 enable read-only string pooling
-QI0f[-] 啟用 Pentium 0x0f 修復(fù) enable Pentium 0x0f fix
-Gy 分隔鏈接器函數(shù) separate functions for linker
-GZ 啟用運(yùn)行時(shí)調(diào)試檢查 enable runtime debug checks
-Gh 啟用鉤子函數(shù)調(diào)用 enable hook function call
-Ge 對(duì)所有函數(shù)強(qiáng)制堆棧檢查 force stack checking for all funcs
-Gs[num] 禁用堆棧檢查調(diào)用 disable stack checking calls
輸出文件
-Fa[file] 命名程序集列表文件 name assembly listing file
-Fo 命名對(duì)象文件 name object file
-FA[sc] 配置程序集列表 configure assembly listing
-Fp 命名預(yù)編譯頭文件 name precompiled header file
-Fd[file] 命名 .PDB 文件 name .PDB file
-Fr[file] 命名源瀏覽器文件 name source browser file
-Fe 命名可執(zhí)行文件 name executable file
-FR[file] 命名擴(kuò)展 .SBR 文件 name extended .SBR file
-Fm[file] 命名映射文件 name map file
預(yù)處理器
-FI 命名強(qiáng)制包含文件 name forced include file
-C 不吸取注釋 don't strip comments
-U 移除預(yù)定義宏 remove predefined macro
-D{=|#} 定義宏 define macro
-u 移除所有預(yù)定義宏 remove all predefined macros
-E 將預(yù)處理定向到標(biāo)準(zhǔn)輸出 preprocess to stdout
-I 添加到包含文件的搜索路徑 add to include search path
-EP 將預(yù)處理定向到標(biāo)準(zhǔn)輸出宏怔,不要帶行號(hào) preprocess to stdout, no #line
-X 忽略“標(biāo)準(zhǔn)位置” ignore "standard places"
-P 預(yù)處理到文件 preprocess to file
語(yǔ)言
-Zi 啟用調(diào)試信息 enable debugging information
-Zl 忽略 .OBJ 中的默認(rèn)庫(kù)名 omit default library name in .OBJ
-ZI 啟用調(diào)試信息的“編輯并繼續(xù)”功能 enable Edit and Continue debug info
-Zg 生成函數(shù)原型 generate function prototypes
-Z7 啟用舊式調(diào)試信息 enable old-style debug info
-Zs 只進(jìn)行語(yǔ)法檢查 syntax check only
-Zd 僅要行號(hào)調(diào)試信息 line number debugging info only
-vd{0|1} 禁用-啟用 vtordisp disable-enable vtordisp
-Zp[n] 在 n 字節(jié)邊界上包裝結(jié)構(gòu) pack structs on n-byte boundary
-vm 指向成員的指針類型 type of pointers to members
-Za 禁用擴(kuò)展(暗指 -Op) disable extensions (implies -Op)
-noBool 禁用“bool”關(guān)鍵字 disable "bool" keyword
-Ze 啟用擴(kuò)展(默認(rèn)) enable extensions (default)
雜項(xiàng)
-?, -help 打印此幫助消息 print this help message
-c 只編譯奏路,不鏈接 compile only, no link
-W 設(shè)置警告等級(jí)(默認(rèn) n=1) set warning level (default n=1)
-H 最大化外部名稱長(zhǎng)度 max external name length
-J 默認(rèn) char 類型是 unsigned default char type is unsigned
-nologo 取消顯示版權(quán)消息 suppress copyright message
-WX 將警告視為錯(cuò)誤 treat warnings as errors
-Tc 將文件編譯為 .c compile file as .c
-Yc[file] 創(chuàng)建 .PCH 文件 create .PCH file
-Tp 將文件編譯為 .cpp compile file as .cpp
-Yd 將調(diào)試信息放在每個(gè) .OBJ 中 put debug info in every .OBJ
-TC 將所有文件編譯為 .c compile all files as .c
-TP 將所有文件編譯為 .cpp compile all files as .cpp
-Yu[file] 使用 .PCH 文件 use .PCH file
-V 設(shè)置版本字符串 set version string
-YX[file] 自動(dòng)的 .PCH 文件 automatic .PCH
-w 禁用所有警告 disable all warnings
-Zm 最大內(nèi)存分配(默認(rèn)為 %) max memory alloc (% of default)
鏈接
-MD 與 MSVCRT.LIB 鏈接 link with MSVCRT.LIB
-MDd 與 MSVCRTD.LIB 調(diào)試庫(kù)鏈接 link with MSVCRTD.LIB debug lib
-ML 與 LIBC.LIB 鏈接 link with LIBC.LIB
-MLd 與 LIBCD.LIB 調(diào)試庫(kù)鏈接 link with LIBCD.LIB debug lib
-MT 與 LIBCMT.LIB 鏈接 link with LIBCMT.LIB
-MTd 與 LIBCMTD.LIB 調(diào)試庫(kù)鏈接 link with LIBCMTD.LIB debug lib
-LD 創(chuàng)建 .DLL Create .DLL
-F 設(shè)置堆棧大小 set stack size
-LDd 創(chuàng)建 .DLL 調(diào)試庫(kù) Create .DLL debug libary
-link [鏈接器選項(xiàng)和庫(kù)] [linker options and libraries]