-o 출력 파일 이름을 변경합니다 (--help를 사용하여 발견했습니다)
그러나 나는 무엇을 알 -Wall
수 없습니까?
-o 출력 파일 이름을 변경합니다 (--help를 사용하여 발견했습니다)
그러나 나는 무엇을 알 -Wall
수 없습니까?
man
으로 스위치의 기능이나 사용 가능한 스위치를 알고 싶다면 프로그램 항목을 읽어보십시오 . 의 man
페이지는 linux.die.net/man/1/gcc에서gcc
읽을 수 있습니다. "-Wall"이라는 텍스트를 빠르게 검색 할 수 있습니다.
답변:
"warn all"의 줄임말입니다. g ++가 알려줄 수있는 (거의) 모든 경고를 켭니다. 일반적으로 특히 초보자 인 경우 이러한 경고를 이해하고 수정하면 코드에서 여러 종류의 문제를 해결하는 데 도움이 될 수 있으므로 좋은 생각입니다.
-Wextra
와 -pedantic
.
-Wall -Wextra
, 다음 설명서를 정독 많은으로 찾아 더 도 있기 때문에, 당신은 가능한 수 있었다 경고 -Wextra
... 일부분입니다
-Wunreachable-code
얼마 전에 비활성화하지 않았다면 Apple은 요즘 훨씬 더 행복 할 것 입니다. ;-)
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
. 현재의 모든 프로젝트는 실제로 그보다 긴 경고 목록을 사용합니다 (아무것도 트리거하지 않음). 그리고 새로운 옵션에 대한 모든 주요 릴리스의 설명서를 확인합니다. 컴파일러는 당신의 친구입니다. 제공 할 수있는 모든 진단을 사용하십시오.
-Wall -Wextra -Wfloat-equal -Wundef -Wcast-align -Wwrite-strings -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wshadow -Woverloaded-virtual
컴파일하는 g++ -std=c++11
동안 사용하도록 권장 합니까? 아니면이 부분을 건너 뛰고 나중에 오류 메시지 플래그 사용을 시작해야합니까? 그렇다면 언제 오류 메시지로 시작해야합니까?
gcc 작성자가 소스에서 유용 하고 쉽게 피할 수있는 경고를 활성화합니다 . -W (최신 릴리스의 -Wextra)도 있습니다. 유용하다고 간주되지만 잘못된 긍정을 해결하는 것이 어렵거나 코드가 서투른 코드가 될 수 있습니다.
gcc에는 일반적으로 유용하지 않은 다른 경고도 많이 있습니다. 참조 http://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/Warning-Options.html#Warning-Options를
모든 경고를 표시합니다. -pedantic
코드의 일부 부적합한 부분에 대해 경고 하는데도 사용 하는 것이 좋습니다 .