91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

linux中不常用的gcc命令行選項有哪些

發布時間:2021-10-26 10:32:22 來源:億速云 閱讀:172 作者:小新 欄目:系統運維

小編給大家分享一下linux中不常用的gcc命令行選項有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

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

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

比如,下面的代碼:

#include <stdio.h> #include <stdlib.h> int main() {     int i=0;     /* ...        some code here         ...     */     if(i);         return 1;      return 0;  }

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

gcc -Wall test.c -o test

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

gcc -Wall -Wextra test.c -o test

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

test.c: In function &lsquo;main&rsquo;: test.c:10:8: warning: suggest braces around empty body in an &lsquo;if&rsquo; statement [-Wempty-body]  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  編譯器是否會報出錯誤或警告?讓我們來測試一下:

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

#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 選項)來編譯這段代碼:

gcc -Wall -Wextra test.c -o test

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

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

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

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

test.c: In function &lsquo;compare&rsquo;: test.c:5:10: warning: comparing floating point with == or != is unsafe [-Wfloat-equal]  if(x == y)

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

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

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

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

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

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

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

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

$ cat gcc-options -Wall -Wextra -Wfloat-equal

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

gcc @gcc-options test.c -o test

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

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

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

以上是“linux中不常用的gcc命令行選項有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

桦南县| 海林市| 伊宁市| 新建县| 白水县| 临西县| 丰县| 贵德县| 洛川县| 聂拉木县| 镇宁| 宁津县| 来凤县| 教育| 阜南县| 额尔古纳市| 凤翔县| 霍林郭勒市| 宜章县| 甘德县| 镇江市| 云阳县| 威宁| 车致| 满洲里市| 灵台县| 鄂伦春自治旗| 克东县| 五莲县| 湖南省| 贵定县| 阜新| 临洮县| 宜川县| 巫山县| 江口县| 高密市| 阜康市| 江北区| 河津市| 南溪县|