在編譯除錯**的時候,編譯警告可以為我們定位到程式中的很多異常問題。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...