2014-02-06 2 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-정렬 -Wsign-비교 -Wnon - 가상 dtor -Wnon 템플릿 - 친구 - -Wsign-프로모션 Woverloaded 가상

+6

나는 (적어도'-Wall -Wextra -pedantic') 모두를 추천 할 것이고, 고칠 수있는 분별력있는 방법을 찾지 못한다. 그래도 다소 주관적입니다. –

+0

마이크에 동의합니다. 주관적 일지 모르지만 명확한 답변이 있습니다. 경고는 개발자를 돕기 위해 컴파일러에서 최대한 많은 도움을 제공합니다. 경고 수정하기 : –

+1

'-Wall -Wextra -Werror''-Werror'를 잊지 마라. 그렇지 않으면 빌드 스크립트가 (아마 잘못된) 프로그램을 실행하게 될 것이다. – Brandin

답변

3

내가 촉진 협약은 다음과 같습니다

-Wall -Wextra -pedantic 

방문이 켜지 특정하는 플래그에 대한 자세한 내용은 GCC의 설명서를 참조하십시오.

+2

이것은 아주 단순한 접근법입니다. 그가 언급 한 많은 플래그는 사용할 수 없습니다. –

+1

@KarolyHorvath : "최소한의"것이 아닙니다. 그는 "지금 나열해야하는 GCC 경고 옵션은 무엇입니까?"가 아니라 "gcc-4.8.1의 O2 최적화 수준에서 권장되는 gcc 경고 옵션은 무엇입니까?"라고 물었습니다. 그가 더 많은 것을 추가하고 싶다면, 그는 확실히 환영합니다. 그러나 당신이 어떤 특정한 이유 때문에 당신이 필요하다는 것을 알지 않는 한 그렇게하지 않는 것이 좋습니다. –

+1

내가 본 모든 심각한 (오픈 소스) 프로젝트는 적어도 십여 개 이상의 플래그를 사용합니다. 그렇다면 귀하의 권장 사항 인 경우 그렇습니다. –

2

빌드 할 대상에 따라 다릅니다. 우분투를 들어 내가 할 것 :

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,하지만 난 단지 명시 적으로 설정하려면 :

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 

를 커널 개발 자립을 위해, 나는 할 ON으로 설정하면 커맨드 라인이 너무 길지 않아도 아프지 않습니다.

안드로이드 및 iOS의 경우 표준 라이브러리에서 발생하는 노이즈를 줄이려면 몇 가지 경고를 해제 할 수도 있습니다.

과도한 플래그가 많아서 컴파일러가 잘못된 프로그래밍 습관에 정직하게 대처할 수 있을지 모르겠다.

관련 문제