gcc, g 編譯時消除特定警告的方法

2021-09-26 18:54:59 字數 1740 閱讀 6191

在編譯除錯**的時候,編譯警告可以為我們定位到程式中的很多異常問題。gcc 編譯器為我們提供了很多的編譯選項:

-wall 

會開啟一些很有用的警告選項,建議編譯時加此選項。具體如下:

-waddress -warray-bounds (only with -o2) -wc++0x-compat 

-wchar-subscripts -wimplicit-int -wimplicit-function-declaration 

-wcomment -wformat -wmain (only for c/objc and unless 

-ffreestanding) -wmissing-braces -wnonnull -wparentheses 

-wpointer-sign -wreorder -wreturn-type -wsequence-point 

-wsign-compare (only in c++) -wstrict-aliasing -wstrict-overflow=1 

-wswitch -wtrigraphs -wuninitialized (only with -o1 and above) 

-wunknown-pragmas -wunused-function -wunused-label -wunused-value 

-wunused-variable 

-w -wextra 

列印一些額外的警告資訊。

-w 禁止顯示所有警告資訊。

-wshadow 

當乙個區域性變數遮蓋住了另乙個區域性變數,或者全域性變數時,給出警告。很有用的選項,建議開啟。 -wall 並不會開啟此項。

-wpointer-arith 

對函式指標或者void *型別的指標進行算術操作時給出警告。也很有用。 -wall 並不會開啟此項。

-wcast-qual 

當強制轉化丟掉了型別修飾符時給出警告。 -wall 並不會開啟此項。

-waggregate-return 

如果定義或呼叫了返回結構體或聯合體的函式,編譯器就發出警告。

-winline 

無論是宣告為 inline 或者是指定了-finline-functions 選項,如果某函式不能內聯,編譯器都將發出警告。如果你的**含有很多 inline 函式的話,這是很有用的選項。

-werror 

把警告當作錯誤。出現任何警告就放棄編譯。

-wunreachable-code 

如果編譯器探測到永遠不會執行到的**,就給出警告。也是比較有用的選項。

-wcast-align 

一旦某個指標型別強制轉換導致目標所需的位址對齊增加時,編譯器就發出警告。

-wundef 

當乙個沒有定義的符號出現在 #if 中時,給出警告。

-wredundant-decls 

如果在同乙個可見域內某定義多次宣告,編譯器就發出警告,即使這些重複宣告有效並且毫無差別。

但如果編譯警告提示等級太低,有時候就會出現很多並不影響程式執行的警告資訊,比如:-wunused-but-set-variable 警告,它表示乙個變數定義了,但是該變數沒有被實際應用到。太多的警告容易在編譯的時候出現「刷屏」,在gcc 和g++ 中也可以遮蔽某一種編譯警告,在警告前面新增-wno就可以了。假如我們需要遮蔽-wunused-but-set-variable 這一類警告,可以這樣新增編譯選項:

-wno-unused-but-set-variable

————————————————

gcc或clang中消除特定警告的方法

一般在編譯 時會有相當多的警告資訊,尤其當我們使用了 wall選項的時候.wall絕不是像其字面意思一樣開啟所有警告.不過它開啟的警告也相當多了.對於一些我們已知 無害 但仍然列印出來擠占可憐的控制台空間的警告,我們當然可以將其 遮蔽 掉.就拿以下 來說 include include includ...

消除第三方庫的編譯器警告

在一些專案中需要引入第三方庫,然而引入標頭檔案編譯之後,一直提示報錯資訊,需要專門針對此檔案消除編譯警告 在檔案頭處新增如下語句 if defined gnuc disable wconversion warnings spuriously triggered when traits size t ...

消除低版本os執行Hadoop時的警告

問題 hadoop執行時出現警告 開啟除錯,檢視具體的報錯資訊 1 開啟調式模式 vi etc profile export hadoop root logger debug,console 2 重新整理環境變數 source etc profile 3 發現提示說glibc2.14 not fou...