亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

不常見但是很有用的 GCC 命令行選項(二)

2019-11-11 04:16:38
字體:
來源:轉載
供稿:網友
導讀gcc 編譯器提供了幾乎數不清的命令行選項列表。當然,沒有人會使用過或者精通它所有的命令行選項,但是有一些命令行選項是每一個 gcc 用戶都應該知道的 - 即使不是必須知道。它們中有一些很常用,其他一些不太常用,但不常用并不意味著它們的用處沒前者大。
回顧

在這個系列的文章中,我們集中于一些不常用但是很有用的 gcc 命令行選項,在第一節已經講到幾個這樣的命令行選項。

不知道你是否能夠回想起,在這個系列教程的第一部分的開始,我簡要的提到了開發者們通常用來生成警告的 -Wall 選項,并不包括一些特殊的警告。如果你不了解這些特殊警告,并且不知道如何生成它們,不用擔心,我將在這篇文章中詳細講解關于它們所有的細節。

除此以外,這篇文章也將涉及與浮點值相關的 gcc 警告選項,以及在 gcc 命令行選項列表變得很大的時候如何更好的管理它們。

在繼續之前,請記住,這個教程中的所有例子、命令和指令都已在 Ubuntu 16.04 LTS 操作系統和 gcc 5.4.0 上測試過。

生成 -Wall 選項不包括的警告

盡管 gcc 編譯器的 -Wall 選項涵蓋了絕大多數警告標記,依然有一些警告不能生成。為了生成它們,請使用 -Wextra 選項。

比如,下面的代碼:

1.#include 2.#include 3.int main()4.{5.    int i=0;6.    /* ...7.       some code here 8.       ...9.    */10.11.    if(i);12.        return 1;13.     return 0; 14.}

我不小心在 if 條件后面多打了一個分號?,F在,如果使用下面的 gcc 命令來進行編譯,不會生成任何警告。

1.gcc -Wall test.c -o test

但是如果同時使用 -Wextra 選項來進行編譯:

1.gcc -Wall -Wextra test.c -o test

會生成下面這樣一個警告:

1.test.c: In function ‘main’:2.test.c:10:8: warning: suggest braces around empty body in an ‘if’ statement [-Wempty-body]3. if(i);

從上面的警告清楚的看到, -Wextra 選項從內部啟用了 -Wempty-body 選項,從而可以檢測可疑代碼并生成警告。下面是這個選項啟用的全部警告標記。

?-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 選項使用時才會啟用)?-Wunused-but-set-parameter (只有和-Wunused或-Wall` 選項使用時才會生成)

如果想對上面所提到的標記有更進一步的了解,請查看 gcc 手冊。

此外,遇到下面這些情況, -Wextra 選項也會生成警告:?一個指針和整數 0 進行 < , <=, >, 或 >= 比較?(僅 C++)一個枚舉類型和一個非枚舉類型同時出現在一個條件表達式中?(僅 C++)有歧義的虛擬基底?(僅 C++)寄存器類型的數組加下標?(僅 C++)對寄存器類型的變量進行取址?(僅 C++)基類沒有在派生類的復制構建函數中進行初始化

浮點值的等值比較時生成警告

你可能已經知道,浮點值不能進行確切的相等比較(如果不知道,請閱讀與浮點值比較相關的 FAQ)。但是如果你不小心這樣做了, gcc 編譯器是否會報出錯誤或警告?讓我們來測試一下:

下面是一段使用 == 運算符進行浮點值比較的代碼:

1.#include2.3.void compare(float x, float y)4.{5.    if(x == y)6.    {7.        PRintf("/n EQUAL /n");8.    }9.}10.11.int main(void)12.{13.    compare(1.234, 1.56789);14.15.    return 0; 16.}

使用下面的 gcc 命令(包含 -Wall 和 -Wextra 選項)來編譯這段代碼:

1.gcc -Wall -Wextra test.c -o test

遺憾的是,上面的命令沒有生成任何與浮點值比較相關的警告??焖倏匆幌?gcc 手冊,在這種情形下可以使用一個專用的 -Wfloat-equal 選項。

下面是包含這個選項的命令:

1.gcc -Wall -Wextra -Wfloat-equal test.c -o test

下面是這條命令產生的輸出:

1.test.c: In function ‘compare’:2.test.c:5:10: warning: comparing floating point with == or != is unsafe [-Wfloat-equal]3. if(x == y)

正如上面你所看到的輸出那樣, -Wfloat-equal 選項會強制 gcc 編譯器生成一個與浮點值比較相關的警告。

這兒是gcc 手冊關于這一選項的說明:

"這背后的想法是,有時,對程序員來說,把浮點值考慮成近似無限精確的實數是方便的。如果你這樣做,那么你需要通過分析代碼,或者其他方式,算出這種計算方式引入的最大或可能的最大誤差,然后進行比較時(以及產生輸出時,不過這是一個不同的問題)允許這個誤差。特別要指出,不應該檢查是否相等,而應該檢查兩個值是否可能出現范圍重疊;這是用關系運算符來做的,所以等值比較可能是搞錯了。"

如何更好的管理 gcc 命令行選項

如果在你使用的 gcc 命令中,命令行選項列表變得很大而且很難管理,那么你可以把它放在一個文本文件中,然后把文件名作為 gcc 命令的一個參數。之后,你必須使用 @file 命令行選項。

比如,下面這行是你的 gcc 命令:

1.gcc -Wall -Wextra -Wfloat-equal test.c -o test

然后你可以把這三個和警告相關的選項放到一個文件里,文件名叫做 gcc-options:

1.$ cat gcc-options 2.-Wall -Wextra -Wfloat-equal

這樣,你的 gcc 命令會變得更加簡潔并且易于管理:

1.gcc @gcc-options test.c -o test

下面是 gcc 手冊關于 @file 的說明:

"從文件中讀取命令行選項。讀取到的選項隨之被插入到原始 @file 選項所在的位置。如果文件不存在或者無法讀取,那么這個選項就會被當成文字處理,而不會被刪除。

文件中的選項以空格分隔。選項中包含空白字符的話,可以用一個由單引號或雙引號包圍完整選項。任何字符(包括反斜杠: '/')均可能通過一個 '/' 前綴而包含在一個選項中。如果該文件本身包含額外的 @file 選項,那么它將會被遞歸處理。"

結論

在這個系列的教程中,我們一共講解了 5 個不常見但是很有用的 gcc 命令行選項: -Save-temps、-g、 -Wextra、-Wfloat-equal 以及 @file。記得花時間練習使用每一個選項,同時不要忘了瀏覽 gcc 手冊上面所提供的關于它們的全部細節。

你是否知道或使用其他像這樣有用的 gcc 命令行選項,并希望把它們在全世界范圍內分享?請在下面的評論區留下所有的細節。

本文

免費提供最新linux技術教程書籍,為開源技術愛好者努力做得更多更好:http://www.linuxprobe.com/


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品国产一区二区三区久久狼5月| 在线视频日韩精品| 成人欧美一区二区三区在线| 亚洲色图欧美制服丝袜另类第一页| 成人有码在线视频| 中文字幕亚洲欧美日韩在线不卡| 日韩美女激情视频| 成人免费观看网址| 亚洲欧美日韩中文在线| 国产精品白嫩初高中害羞小美女| 日韩成人中文字幕| 亚洲欧美日韩久久久久久| 欧美黑人极品猛少妇色xxxxx| 欧美另类极品videosbestfree| 韩日精品中文字幕| 国产精品视频一区国模私拍| 亚洲最大成人免费视频| 久久中文字幕国产| 欧美不卡视频一区发布| 亚洲成人动漫在线播放| yw.139尤物在线精品视频| 色噜噜久久综合伊人一本| 久久精品影视伊人网| 亚洲成**性毛茸茸| 成人av.网址在线网站| 欧美xxxx做受欧美.88| 欧美性猛交xxxx富婆弯腰| 久久综合久久八八| 久久人人97超碰精品888| 亚洲美女中文字幕| 国产精品美女主播| 国产一区二区三区视频在线观看| 精品高清一区二区三区| 97福利一区二区| 日韩中文在线中文网在线观看| 亚洲高清av在线| 欧美成人精品在线| 久久久精品国产网站| 亚洲精品一区久久久久久| 国产精品久久久久久久久久久久久久| 热草久综合在线| 亚洲精品综合精品自拍| 欧美专区福利在线| 日韩av免费一区| 国产成人精品免高潮费视频| 91国语精品自产拍在线观看性色| 欧美一级电影免费在线观看| 久久99精品国产99久久6尤物| 国内精品400部情侣激情| 91精品免费视频| 亚洲高清一区二| 欧美性xxxxx| 日韩高清电影免费观看完整版| 日韩av大片免费看| 在线免费看av不卡| 国产精品揄拍一区二区| 成人免费视频xnxx.com| 91夜夜揉人人捏人人添红杏| 国产在线不卡精品| 久久人体大胆视频| 亚洲精品中文字幕有码专区| 欧美丰满少妇xxxxx| 国产日韩在线看| 国产在线拍偷自揄拍精品| 日韩精品在线免费观看视频| 久久成人精品一区二区三区| 欧美激情久久久| 亚洲成人av在线播放| 午夜精品久久久久久99热| 成人精品aaaa网站| 国产不卡av在线| 亚洲人午夜精品| 成人免费视频在线观看超级碰| 欧美日韩精品国产| 91久久久久久久久久| 国产精品av网站| 成人动漫网站在线观看| 热久久99这里有精品| 国产91成人video| 亚洲女人天堂色在线7777| 亚洲成人中文字幕| 色无极影院亚洲| 国产精品午夜一区二区欲梦| 国产成人鲁鲁免费视频a| 欧美精品国产精品日韩精品| 久久精品国产一区二区电影| 久久免费精品日本久久中文字幕| 这里只有精品视频| 成人在线小视频| 一级做a爰片久久毛片美女图片| 亚洲精品美女久久久久| 日韩欧亚中文在线| 亚洲国产日韩精品在线| 亚洲人午夜精品免费| 欧美精品18videosex性欧美| 亚洲最大成人在线| 性色av一区二区三区免费| 午夜精品久久久久久久久久久久久| 欧美精品在线看| 久久久久久欧美| 精品久久久国产| 午夜精品久久久久久久99热| 欧洲s码亚洲m码精品一区| 国产女精品视频网站免费| 红桃av永久久久| 国产成人一区二区三区电影| 久久免费视频在线观看| 91精品视频在线播放| 中文字幕精品久久久久| 国产做受69高潮| 中文字幕在线日韩| 91成人精品网站| 欧美性开放视频| 成人美女av在线直播| 成人免费黄色网| 国产成人精品在线观看| 成人国产精品久久久久久亚洲| 亚洲欧美日韩天堂一区二区| 亚洲国产精品久久久久久| 欧美床上激情在线观看| 久久精品电影一区二区| 精品动漫一区二区| 日韩av片永久免费网站| 欧美激情奇米色| 97色在线视频观看| 国产精品丝袜久久久久久高清| 国产网站欧美日韩免费精品在线观看| 欧美日本高清一区| 久热在线中文字幕色999舞| 在线观看欧美www| 亚洲乱码av中文一区二区| 亚洲一区二区三区四区在线播放| 日韩中文字幕欧美| 91精品国产综合久久久久久久久| 国产精品欧美亚洲777777| 国产精品老女人视频| 亚洲精品aⅴ中文字幕乱码| 精品人伦一区二区三区蜜桃网站| 日韩欧美大尺度| 国产精品福利片| 亚洲综合大片69999| 亚洲欧洲日本专区| 欧美影院成年免费版| 久久这里有精品| 亚洲激情国产精品| 欧美激情亚洲一区| 九九久久久久99精品| 91热精品视频| 久青草国产97香蕉在线视频| 精品久久久久久久久国产字幕| 92看片淫黄大片欧美看国产片| 欧美性猛交xxxx免费看久久久| 96pao国产成视频永久免费| 一区二区亚洲精品国产| 欧美孕妇与黑人孕交| 久久999免费视频| 国产欧美欧洲在线观看| 久久影视免费观看| 亚洲国产天堂久久综合网| 91国产高清在线| 尤物精品国产第一福利三区| 日韩精品中文字幕久久臀| 久久精品男人天堂| 欧美丰满少妇xxxxx|