당신은 할 수 없습니다.
GCC 4.4.0 매뉴얼은 해당 버전에 대해서만 포괄적이지만 4.4.0에 대한 가능한 모든 경고를 나열합니다. 예를 들어 일부 언어 별 옵션은 C ++ 옵션 또는 Obj-C 옵션 페이지에 있습니다. 옵션 요약을 살펴 보는 것이 좋습니다.
켜기 모든 것을 포함 할 것입니다 -Wdouble-promotion
32 비트 단 정밀도 부동 소수점 유닛을 구현하는 CPU에만 관련되는 float
하드웨어, 그러나 에뮬레이션 double
소프트웨어입니다. double
소프트웨어 에뮬레이션을 사용할 때 와 같이 계산을 수행하면 속도가 느려집니다. 이는 일부 임베디드 CPU와 관련이 있지만 64 비트 부동 소수점에 대한 하드웨어 지원 기능이있는 최신 데스크탑 CPU와는 전혀 관련이 없습니다.
일반적으로 유용하지 않은 또 다른 경고는이며 -Wtraditional
, 이는 전통적인 C (예 : "string " "concatenation"
ISO C 함수 정의 )에서 다른 의미를 갖거나 작동하지 않는 완벽하게 구성된 코드에 대해 경고 합니다! 30 년 된 컴파일러와의 호환성에 정말로 관심이 있습니까? 글쓰기에 대한 경고를 정말로 원하십니까 int inc(int i) { return i+1; }
?
나는 -Weffc++
너무 시끄러워서 쓸모가 없다고 생각 합니다. 구식 C ++ 의 오래된 첫 번째 버전을 기반으로하며 완벽하게 유효한 C ++ 인 구조체에 대해 경고합니다 (이 책의 이후 버전에서 지침이 변경됨). std::string
생성자에서 멤버를 초기화하지 않았다고 경고했다 . 그것은 내가 원하는 것을 정확하게하는 기본 생성자를 가지고 있습니다. 왜 m_str()
그것을 호출하기 위해 작성해야 합니까? -Weffc++
도움이 될 것입니다 경고는 컴파일러가 정확하게 (위음성을 제공) 감지하기 너무 어려운, 그러한 명시 적으로 모든 멤버를 초기화하는 등의 유용하지 않은 사람은 단지 잘못된 반응을 제공, 많은 소음이 너무 생산하고 있습니다.
Luc Danton 은 C ++ 코드에는 거의 이해가되지 않는 쓸모없는 경고 의 훌륭한 예 를 제공했습니다 -Waggregate-return
.
즉, 당신은 정말로 모든 경고를 원하지는 않습니다 .
매뉴얼을 살펴보고, 그들에 대해 읽고, 어떤 것을 가능하게 할 것인지 결정하고 시도하십시오. 어쨌든 컴파일러 매뉴얼을 읽는 것은 Good Thing TM 이며, 지름길을 이해하고 알지 못하는 경고를 활성화하는 것은 특히 좋은 생각이 아닙니다. 특히 RTFM을 피해야하는 경우에는 그렇습니다.
방금 모든 것을 켜는 사람 은 아마 단서가 없기 때문에 그렇게하고 있거나 머리가 뾰족한 상사가 "경고 없음"이라고 말했습니다.
일부 경고는 중요하지만 일부 경고는 중요하지 않습니다. 차별적이거나 프로그램을 망쳐 놓아야합니다. 예를 들어을 고려하십시오 -Wdouble-promotion
. 임베디드 시스템에서 작업하는 경우이를 원할 수 있습니다. 데스크탑 시스템에서 작업하고 있다면 아마 그렇지 않을 것입니다. 그리고 당신은 -Wtraditional
원합니까? 나는 그것을 의심한다.
편집 : WONTFIX로 닫히는 모든 경고를 활성화하려면 -Wall-all 도 참조하십시오 .
편집 2 : 컴파일러 버전에 따라 다른 경고를 사용해야하는 makefile에 대한 DevSolar의 불만에 대한 응답으로 -Wall -Wextra
적합하지 않은 경우 컴파일러 별 및 버전 별 CFLAGS를 사용하는 것이 어렵지 않습니다.
compiler_name := $(notdir $(CC))
ifeq ($(compiler_name),gcc)
compiler_version := $(basename $(shell $(CC) -dumpversion))
endif
ifeq ($(compile_name),clang)
compiler_version := $(shell $(CC) --version | awk 'NR==1{print $$3}')
endif
# ...
wflags.gcc.base := -Wall -Wextra
wflags.gcc.4.7 := -Wzero-as-null-pointer-constant
wflags.gcc.4.8 := $(wflags.gcc.4.7)
wflags.clang.base := -Wall -Wextra
wflags.clang.3.2 := -Weverything
CFLAGS += $(wflags.$(compiler_name).base) $(wflags.$(compiler_name).$(compiler_version))