2014-02-06 37 views
3

我最近從gcc-4.2.4移到了gcc-4.8.1。在gcc-4.8.1的O2優化級別推薦的gcc警告選項是什麼?gcc-4.8.1中O2優化級別的推薦警告標記

我一直在gcc-4.2.4中使用以下警告標誌: -Wall -Wno-括號-Wpointer-arith -Wcast-align -Wign-compare -Wnon-virtual-dtor -Wnon-template-friend - Woverloaded虛擬-Wsign宣傳

+6

我建議所有的人(至少'-Wall -Wextra -pedantic'),只有禁用任何你真的不能找到一個合理的方式來解決。不過,這有點主觀。 –

+0

我同意邁克,這可能是主觀的,但有一個明確的答案:警告有幫助開發人員,讓編譯器儘可能幫助你。修復警告:) –

+1

'-Wall -Wextra -Werror'不要忘了'-Werror'否則你的構建腳本會繼續運行您的(可能不正確)程序 – Brandin

回答

3

我促進公約是:

-Wall -Wextra -pedantic 

訪問有關詳細信息,GCC文檔其具體標誌這開啓。

+2

這是一個相當簡約的方法,他提到的許多標誌都不會啓用。 –

+1

@KolyolyHorvath:根本不是「簡約」。他問:「在gcc-4.8.1的O2優化級別推薦的gcc警告選項是什麼?」,而不是「我現在列出的GCC警告選項是什麼?」如果他想增加更多,他肯定會受到歡迎,但我建議不要這樣做,除非您知道需要某些特定原因。 –

+1

我看到的任何嚴肅(開源)項目至少使用了十多個標誌,所以如果這是您的建議,那麼是的,我覺得它很簡約。 –

2

取決於您想要構建的目標。 Ubuntu的我會做:

CWARN =-Wall -Wextra -Wattributes -Wbuiltin-macro-redefined -Wcast-align -Wconversion -Wdeclaration-after-statement \ 
     -Wdiv-by-zero -Wdouble-promotion -Wenum-compare -Wfloat-equal -Wimplicit-int -Winit-self -Wint-to-pointer-cast \ 
     -Wjump-misses-init -Wlogical-op -Wmissing-braces -Wmissing-field-initializers -Wmissing-parameter-type   \ 
     -Woverflow -Wpointer-arith -Wpointer-sign -Wpointer-to-int-cast -Wredundant-decls -Wreturn-type -Wshadow  \ 
     -Wsign-compare -Wtype-limits -Wuninitialized -Wwrite-strings \ 
     -Wno-unused-parameter -Wno-multichar -Wno-strict-aliasing 
CXXWARN =-Wall -Wextra -Wattributes -Wbuiltin-macro-redefined -Wc++0x-compat -Wcast-align -Wconversion -Wdiv-by-zero  \ 
     -Wdouble-promotion -Wenum-compare -Wfloat-equal -Winit-self -Wint-to-pointer-cast -Wlogical-op -Wmissing-braces \ 
     -Wmissing-field-initializers -Woverflow -Wpointer-arith -Wredundant-decls -Wreturn-type -Wshadow -Wsign-compare \ 
     -Wsign-promo -Wtype-limits -Wuninitialized -Wwrite-strings \ 
     -Wno-unused-parameter -Wno-multichar -Wno-strict-aliasing 

對於獨立內核開發的,我做的:

CWARN =-Wall -Wextra -Wattributes -Wbuiltin-macro-redefined -Wcast-align -Wconversion   \\ 
      -Wdiv-by-zero -Wdouble-promotion -Wenum-compare -Wfloat-equal -Winit-self    \\ 
      -Wint-to-pointer-cast -Wlogical-op -Wmissing-braces -Wmissing-field-initializers  \\ 
      -Woverflow -Wpointer-arith -Wredundant-decls -Wreturn-type -Wshadow -Wsign-compare  \\ 
      -Wtype-limits -Wuninitialized -Wwrite-strings           \\ 
      -Wno-unused-parameter -Wno-unused-variable -Wno-multichar -Wno-unused-but-set-variable \\ 
      -Wdeclaration-after-statement -Wimplicit-int -Wjump-misses-init -Wpointer-sign   \\ 
      -Wpointer-to-int-cast -Wmissing-parameter-type 
CXXWARN =-Wall -Wextra -Wattributes -Wbuiltin-macro-redefined -Wcast-align -Wconversion   \\ 
      -Wdiv-by-zero -Wdouble-promotion -Wenum-compare -Wfloat-equal -Winit-self    \\ 
      -Wint-to-pointer-cast -Wlogical-op -Wmissing-braces -Wmissing-field-initializers  \\ 
      -Woverflow -Wpointer-arith -Wredundant-decls -Wreturn-type -Wshadow -Wsign-compare  \\ 
      -Wtype-limits -Wuninitialized -Wwrite-strings           \\ 
      -Wno-unused-parameter -Wno-unused-variable -Wno-multichar -Wno-unused-but-set-variable \\ 
      -Wc++0x-compat -Wsign-promo 

一些警告的是與-Wextra或朋友,但我只是想明確地將它們ON,如果命令行不太長,它也不會受到傷害。

Android和iOS您可能還需要關閉一些警告,從標準庫減少噪音。

萬一你可能不知道的是,有很多標誌是矯枉過正,但它使編譯器是誠實的任何不好的編程習慣,它可能不是來自你,但是從你的隊友。