小編給大家分享一下linux中不常用的gcc命令行選項(xiàng)有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
專注于為中小企業(yè)提供網(wǎng)站建設(shè)、成都做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)相山免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
生成 -Wall 選項(xiàng)不包括的警告
盡管 gcc 編譯器的 -Wall 選項(xiàng)涵蓋了絕大多數(shù)警告標(biāo)記,依然有一些警告不能生成。為了生成它們,請使用 -Wextra 選項(xiàng)。
比如,下面的代碼:
#include <stdio.h> #include <stdlib.h> int main() { int i=0; /* ... some code here ... */ if(i); return 1; return 0; }
我不小心在 if 條件后面多打了一個(gè)分號。現(xiàn)在,如果使用下面的 gcc 命令來進(jìn)行編譯,不會(huì)生成任何警告。
gcc -Wall test.c -o test
但是如果同時(shí)使用 -Wextra 選項(xiàng)來進(jìn)行編譯:
gcc -Wall -Wextra test.c -o test
會(huì)生成下面這樣一個(gè)警告:
test.c: In function ‘main’: test.c:10:8: warning: suggest braces around empty body in an ‘if’ statement [-Wempty-body] if(i);
從上面的警告清楚的看到, -Wextra 選項(xiàng)從內(nèi)部啟用了 -Wempty-body 選項(xiàng),從而可以檢測可疑代碼并生成警告。下面是這個(gè)選項(xiàng)啟用的全部警告標(biāo)記。
-Wclobbered
-Wempty-body
-Wignored-qualifiers
-Wmissing-field-initializers
-Wmissing-parameter-type (僅針對 C 語言)
-Wold-style-declaration (僅針對 C 語言)
-Woverride-init
-Wsign-compare
-Wtype-limits
-Wuninitialized
-Wunused-parameter (只有和 -Wunused 或 -Wall 選項(xiàng)使用時(shí)才會(huì)啟用)
-Wunused-but-set-parameter (只有和-Wunused或-Wall` 選項(xiàng)使用時(shí)才會(huì)生成)
如果想對上面所提到的標(biāo)記有更進(jìn)一步的了解,請查看 gcc 手冊。
此外,遇到下面這些情況, -Wextra 選項(xiàng)也會(huì)生成警告:
一個(gè)指針和整數(shù) 0 進(jìn)行 <, <=, >, 或 >= 比較
(僅 C++)一個(gè)枚舉類型和一個(gè)非枚舉類型同時(shí)出現(xiàn)在一個(gè)條件表達(dá)式中
(僅 C++)有歧義的虛擬基底
(僅 C++)寄存器類型的數(shù)組加下標(biāo)
(僅 C++)對寄存器類型的變量進(jìn)行取址
(僅 C++)基類沒有在派生類的復(fù)制構(gòu)建函數(shù)中進(jìn)行初始化
浮點(diǎn)值的等值比較時(shí)生成警告
你可能已經(jīng)知道,浮點(diǎn)值不能進(jìn)行確切的相等比較(如果不知道,請閱讀與浮點(diǎn)值比較相關(guān)的 FAQ)。但是如果你不小心這樣做了, gcc 編譯器是否會(huì)報(bào)出錯(cuò)誤或警告?讓我們來測試一下:
下面是一段使用 == 運(yùn)算符進(jìn)行浮點(diǎn)值比較的代碼:
#include<stdio.h> void compare(float x, float y) { if(x == y) { printf("\n EQUAL \n"); } } int main(void) { compare(1.234, 1.56789); return 0; }
使用下面的 gcc 命令(包含 -Wall 和 -Wextra 選項(xiàng))來編譯這段代碼:
gcc -Wall -Wextra test.c -o test
遺憾的是,上面的命令沒有生成任何與浮點(diǎn)值比較相關(guān)的警告??焖倏匆幌?gcc 手冊,在這種情形下可以使用一個(gè)專用的 -Wfloat-equal 選項(xiàng)。
下面是包含這個(gè)選項(xiàng)的命令:
gcc -Wall -Wextra -Wfloat-equal test.c -o test
下面是這條命令產(chǎn)生的輸出:
test.c: In function ‘compare’: test.c:5:10: warning: comparing floating point with == or != is unsafe [-Wfloat-equal] if(x == y)
正如上面你所看到的輸出那樣, -Wfloat-equal 選項(xiàng)會(huì)強(qiáng)制 gcc 編譯器生成一個(gè)與浮點(diǎn)值比較相關(guān)的警告。
這兒是gcc 手冊關(guān)于這一選項(xiàng)的說明:
這背后的想法是,有時(shí),對程序員來說,把浮點(diǎn)值考慮成近似***精確的實(shí)數(shù)是方便的。如果你這樣做,那么你需要通過分析代碼,或者其他方式,算出這種計(jì)算方式引入的***或可能的***誤差,然后進(jìn)行比較時(shí)(以及產(chǎn)生輸出時(shí),不過這是一個(gè)不同的問題)允許這個(gè)誤差。特別要指出,不應(yīng)該檢查是否相等,而應(yīng)該檢查兩個(gè)值是否可能出現(xiàn)范圍重疊;這是用關(guān)系運(yùn)算符來做的,所以等值比較可能是搞錯(cuò)了。
如何更好的管理 gcc 命令行選項(xiàng)
如果在你使用的 gcc 命令中,命令行選項(xiàng)列表變得很大而且很難管理,那么你可以把它放在一個(gè)文本文件中,然后把文件名作為 gcc 命令的一個(gè)參數(shù)。之后,你必須使用 @file 命令行選項(xiàng)。
比如,下面這行是你的 gcc 命令:
gcc -Wall -Wextra -Wfloat-equal test.c -o test
然后你可以把這三個(gè)和警告相關(guān)的選項(xiàng)放到一個(gè)文件里,文件名叫做 gcc-options:
$ cat gcc-options -Wall -Wextra -Wfloat-equal
這樣,你的 gcc 命令會(huì)變得更加簡潔并且易于管理:
gcc @gcc-options test.c -o test
下面是 gcc 手冊關(guān)于 @file 的說明:
從文件中讀取命令行選項(xiàng)。讀取到的選項(xiàng)隨之被插入到原始 @file 選項(xiàng)所在的位置。如果文件不存在或者無法讀取,那么這個(gè)選項(xiàng)就會(huì)被當(dāng)成文字處理,而不會(huì)被刪除。
文件中的選項(xiàng)以空格分隔。選項(xiàng)中包含空白字符的話,可以用一個(gè)由單引號或雙引號包圍完整選項(xiàng)。任何字符(包括反斜杠: '\')均可能通過一個(gè) '\' 前綴而包含在一個(gè)選項(xiàng)中。如果該文件本身包含額外的 @file 選項(xiàng),那么它將會(huì)被遞歸處理。
以上是“l(fā)inux中不常用的gcc命令行選項(xiàng)有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
文章名稱:linux中不常用的gcc命令行選項(xiàng)有哪些
分享地址:http://chinadenli.net/article18/gicodp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、微信公眾號、小程序開發(fā)、關(guān)鍵詞優(yōu)化、靜態(tài)網(wǎng)站、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)