your programing

“g ++ -Wall test.cpp -o test”의“-Wall”은 무엇을합니까?

lovepro 2020. 10. 16. 07:55
반응형

“g ++ -Wall test.cpp -o test”의“-Wall”은 무엇을합니까?


-o 출력 파일 이름을 변경합니다 (--help를 사용하여 발견했습니다)

그러나 나는 무엇을 알 -Wall수 없습니까?


"warn all"의 줄임말입니다. g ++가 알려줄 수있는 (거의) 모든 경고를 켭니다. 일반적으로 특히 초보자 인 경우 좋은 생각입니다. 이러한 경고를 이해하고 수정하면 코드에서 다양한 종류의 문제를 해결하는 데 도움이 될 수 있기 때문입니다.


man gcc를 참조하십시오.

-Wall 은 다음 경고를 켭니다.

-Waddress -Warray-bounds (only with -O2) -Wc++0x-compat -Wchar-subscripts
-Wenum-compare (in C/Objc; this is on by default in C++) -Wimplicit-int (C and
 Objective-C only) -Wimplicit-function-declaration (C and Objective-C only) 
-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 -Wunknown-pragmas 
-Wunused-function -Wunused-label -Wunused-value -Wunused-variable 
-Wvolatile-register-var

-Wextra 는 다음을 포함합니다 :

-Wclobbered -Wempty-body -Wignored-qualifiers -Wmissing-field-initializers
-Wmissing-parameter-type (C only) -Wold-style-declaration (C only) -Woverride-init
-Wsign-compare -Wtype-limits -Wuninitialized -Wunused-parameter (only with -Wunused
 or -Wall) -Wunused-but-set-parameter (only with -Wunused or -Wall)

명시 적으로 켜야하는 더 많은 경고가 있습니다.

예를 들어 C 코드의 경우 다음을 사용합니다.

-Wall -Wextra -Waggregate-return -Wcast-align -Wcast-qual -Wdisabled-optimization -Wdiv-by-zero -Wendif-labels -Wformat-extra-args -Wformat-nonliteral -Wformat-security -Wformat-y2k -Wimplicit -Wimport -Winit-self -Winline -Winvalid-pch -Wjump-misses-init -Wlogical-op -Werror = missing-braces -Wmissing-declarations -Wno-missing-format-attribute -Wmissing-include-dirs -Wmultichar -Wpacked -Wpointer-arith -Wreturn-type -Wsequence-point -Wsign-compare -Wstrict-aliasing -Wstrict-aliasing = 2 -Wswitch -Wswitch-default -Werror = undef -Wno-unused -Wvariadic-macros -Wwrite-strings -Wc ++ -compat -Werror = 문 후 선언 -Werror = 암시 적 기능 선언 -Wmissing-prototypes -Werror = nested-externs -Werror = old-style-definition -Werror = strict-prototypes

또는 https://www.gnu.org/software/autoconf-archive/ax_compiler_flags.html을 사용하는 경고 세트


안타깝게도 매뉴얼의 실제 관련 부분을 인용하는 답변은 없습니다.

이를 통해 일부 사용자가 의심스럽고 피하기 쉬운 (또는 경고를 방지하기 위해 수정하기 위해 수정하는) 구성에 대한 모든 경고를 매크로와 함께 사용할 수 있습니다.

[...]

일부 경고 플래그는에 의해 암시되지 않습니다 -Wall. 그들 중 일부는 사용자가 일반적으로 의심스럽지 않지만 때때로 확인하고 싶을 수도있는 구성에 대해 경고합니다. 어떤 경우에는 피해야하거나 피하기 어려운 구조에 대해 경고하는 경우도 있으며, 경고를 억제하기 위해 코드를 수정하는 간단한 방법이 없습니다. 이들 중 일부는에서 활성화 -Wextra되지만 대부분은 개별적으로 활성화되어야합니다.

에르고 :

  • -Wall"모든 경고"를 의미 하지는 않습니다 .
  • 또한 않습니다 하지 아니라 장거리 슛으로 "모든 (거의)"을 의미한다.
  • 그것은 않는 개별 옵션의 집합을 의미 변경할 수밖에 없다 .

결론적으로, 설정해야하는 경고의 절대 최소값입니다. -Wall -Wextra더 나은 반면 , 컴파일러가 할 수있는 모든 오류 검사를 여전히 사용하지는 않습니다.


개인적으로 나는 -Wall -Wextra -Wfloat-equal -Wundef -Wcast-align -Wwrite-strings -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wshadow -Woverloaded-virtual. 현재의 모든 프로젝트는 실제로 그보다 긴 경고 목록을 사용합니다 (아무것도 트리거하지 않음). 그리고 새로운 옵션에 대한 모든 주요 릴리스의 설명서를 확인합니다. 컴파일러는 당신의 친구입니다. 제공 할 수있는 모든 진단을 사용하십시오.


gcc 작성자가 소스에서 유용 하고 쉽게 피할 수있는 경고를 활성화합니다 . -W (최신 릴리스의 -Wextra)도 있습니다. 유용하다고 간주되지만 잘못된 긍정을 해결하는 것이 어렵거나 코드가 서투른 코드가 될 수 있습니다.

gcc에는 일반적으로 유용하지 않은 다른 경고도 많이 있습니다. 참조 http://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/Warning-Options.html#Warning-Options를


그것 enables most warning messages.

을 사용하면 자세한 내용을 확인할 수 있습니다 g++ --help=warnings.


모든 경고를 활성화합니다. ( "모두 경고"로 표시)


모든 경고를 표시합니다. -pedantic코드의 일부 부적합한 부분에 대해 경고 할 때도 사용 하는 것이 좋습니다 .

참고 URL : https://stackoverflow.com/questions/2408038/what-does-wall-in-g-wall-test-cpp-o-test-do

반응형