compiler-errors gcc컴파일 - C[closed]에 대한 권장 gcc 경고 옵션




최적화 컴파일러 (13)

기타 - 사람들이 유용한 다른 경고는 무엇입니까?

http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Warning-Options.html


Answers

-Wundundant-decls -Wested-externs -Withrict-prototypes -Wextra -Werror-implicit-function-declaration -Wunused -Word-unused-value -Wreturn-type


-Wfloat-equal, -Wshadow, -Wissing-prototypes,


보통 "-W -Wall -ansi -pedantic"으로 컴파일하면 코드의 최대 품질과 이식성을 보장 할 수 있습니다.


나는 또한 다음을 사용한다.

-Width-overflow = 5

정수의 오버플로 동작에 의존하는 코드를 작성하면 발생할 있는 불쾌한 버그를 잡으려고합니다.

과:

-Wextra

어떤 옵션을 사용하면 좋을 것입니다. 대부분은 C ++ 용입니다.


2011-09-01 현재 gcc 버전 4.6.1

내 현재 "개발"별칭

gcc -std=c89 -pedantic -Wall \
    -Wno-missing-braces -Wextra -Wno-missing-field-initializers -Wformat=2 \
    -Wswitch-default -Wswitch-enum -Wcast-align -Wpointer-arith \
    -Wbad-function-cast -Wstrict-overflow=5 -Wstrict-prototypes -Winline \
    -Wundef -Wnested-externs -Wcast-qual -Wshadow -Wunreachable-code \
    -Wlogical-op -Wfloat-equal -Wstrict-aliasing=2 -Wredundant-decls \
    -Wold-style-definition -Werror \
    -ggdb3 \
    -O0 \
    -fno-omit-frame-pointer -ffloat-store -fno-common -fstrict-aliasing \
    -lm

"릴리스"별명

gcc -std=c89 -pedantic -O3 -DNDEBUG -flto -lm

2009-11-03 현재

"개발"별명

gcc -Wall -Wextra -Wformat=2 -Wswitch-default -Wcast-align -Wpointer-arith \
    -Wbad-function-cast -Wstrict-prototypes -Winline -Wundef -Wnested-externs \
    -Wcast-qual -Wshadow -Wwrite-strings -Wconversion -Wunreachable-code \
    -Wstrict-aliasing=2 -ffloat-store -fno-common -fstrict-aliasing \
    -lm -std=c89 -pedantic -O0 -ggdb3 -pg --coverage

"릴리스"별명

gcc -lm -std=c89 -pedantic -O3 -DNDEBUG --combine -fwhole-program -funroll-loops

나는 일반적으로

gcc -Wall -W -Wunused-parameter -Wmissing-declarations -Wstrict-prototypes -Wmissing-prototypes -Wsign-compare -Wconversion -Wshadow -Wcast-align -Wparentheses -Wsequence-point -Wdeclaration-after-statement -Wundef -Wpointer-arith -Wnested-externs -Wredundant-decls -Werror -Wdisabled-optimization -pedantic -funit-at-a-time -o

사용하는 GCC 버전에 대한 매뉴얼을 구해서 사용 가능한 모든 경고 옵션을 찾은 다음 그럴만 한 이유가있는 것들만 비활성화하십시오. (예를 들어 달리 수정할 수없는 제 3 자 헤더는 많은 경고를 줄 것입니다.) 그 이유를 문서화하십시오. Makefile이나 그 옵션을 설정하는 곳마다. 정기적 인 인터벌 과 컴파일러를 업그레이드 할 때마다 설정을 검토하십시오 .

컴파일러는 당신의 친구입니다. 경고는 당신의 친구입니다. 가능한 한 잠재적 인 문제를 알려주는 기회를 컴파일러에게 제공하십시오.


- 오류 - 오류


지금은 다음을 사용합니다.

-Wall -W -Wextra -Wconversion -Wshadow -Wcast-qual -Write-strings -Werror

그 목록은 주로 "gcc 소개"에서 나온 다음 방어 프로그래밍 ( Ulrich Drepper recomendation)에서 가져온 것입니다 ( http://people.redhat.com/drepper/Defensive-slides.pdf ).

그러나 나는 나의 목록 뒤에 어떤 과학도 가지지 않고있다, 그것은 단지 좋은 목록 인 것 같은 느낌이 들었다.

/ 요한

참고 : 나는 그런 페낭 식 깃발을 좋아하지 않습니다 ....

참고 : 나는 -W와 -Wextra가 어느 정도 동일한 것이라고 생각한다.


나는 일상적으로 사용한다.

    gcc -m64 -std=c99 -pedantic -Wall -Wshadow -Wpointer-arith -Wcast-qual \
        -Wstrict-prototypes -Wmissing-prototypes

이 세트는 사용하지 않은 사람들 (코드를 가지고 처음으로 플래그를 컴파일하는 사람들)을 많이 잡습니다. 가끔은 나에게 문제가된다. (Wcast-qual은 때로는 성가시다.)


-O 를 지정하지 않으면 초기화되지 않은 변수에 대한 경고가 작동하지 않으므로이를 내 목록에 포함합니다.

-g -O -Wall -Werror -Wextra -pedantic -std=c99

-pedantic -Wall -Wextra -Write-string -Word-unused-parameter

"나를 많이 상처 입는다"모드에서, 나는 그만 둔다.

나는 내 코드가 특히 C ++로 경고를 받고 싶어한다. C 컴파일러 경고는 종종 무시 될 수 있지만 많은 C ++ 경고는 소스 코드에 근본적인 결함을 보여줍니다.


이것의 대부분은 수학 라이브러리의 차이 때문입니다. 고려해야 할 몇 가지 사항 :

  • 예, x87 장치가있는 x86 프로세서에는 fsin 및 fcos 명령이 있습니다. 그러나 마이크로 코드로 구현되므로 순수한 소프트웨어 구현보다 더 빠를 수 밖에없는 특별한 이유는 없습니다.
  • GCC는 자체 수학 라이브러리가 없지만 제공된 시스템을 사용합니다. 리눅스에서는 일반적으로 glibc가 제공한다.
  • 32 비트 x86 glibc는 fsin / fcos를 사용합니다.
  • x86_64 glibc는 SSE2 장치를 사용하는 소프트웨어 구현을 사용합니다. 오랜 시간 동안, 이것은 방금 x87 명령을 사용했던 32 비트 glibc 버전보다 훨씬 느립니다. 그러나 개선점이 (다소 최근에) 이루어 졌으므로 어떤 glibc 버전을 사용 하느냐에 따라 더 이상 상황이 나쁠 수도 있습니다.
  • Intel 컴파일러 제품군에는 매우 빠른 수학 라이브러리 (libimf)가 있습니다. 또한 벡터화 된 초월 수학 함수가 포함되어있어 종종 이러한 함수를 사용하여 루프를 더욱 빠르게 할 수 있습니다.






c gcc compiler-errors