문제

Linux, OS X 및 Windows의 다양한 풍미에서 개발되고 실행되는 대규모 협업 C ++ 프로젝트를 연구하고 있습니다. 우리는 GCC, Visual Studio C ++ 및 Intel C ++ 컴파일러를 사용하여 이러한 플랫폼을 컴파일합니다. 점점 더 많은 사람들이 프로젝트 코드를 개발하기 시작함에 따라 특정 운영 체제의 특정 컴파일러에 특정한 컴파일 및 런타임에서 이상한 오류가 발생하기 시작했습니다. 이에 대한 예는 특정 OS/컴파일러 쌍이 귀하를 찾는 것처럼 보이는 헤더의 암시 적 포함이며, 실수로 파생 클래스의 기본 클래스에서 기능을 과부하시킵니다.

저의 목표는 GCC에 대한 편집을보다 엄격하게 만들고 모든 플랫폼에서 더 많은 오류를 포착하여 이러한 문제를 계속 수행하지 않도록하는 것입니다. 다음은 Google과 GCC Man Pages를 통해 찾은 GCC를 시험해 볼 깃발 목록입니다.

  • -벽
  • -wextra
  • -Winit-self
  • -Wold 스타일 캐스트
  • -Woverloaded-Virtual
  • -유사성
  • -wmissing 퇴거
  • -Winit-self
  • -ANSI
  • -표식

사람들이 GCC를 만들기 위해 사용하는 다른 플래그는 무엇입니까 (그리고 덜 중요한 시각적 스튜디오 C ++ 및 Intel C ++ 컴파일러)는 C ++ 언어의 엄격한 표준에 순종합니까? 모든 컴파일러의 모든 버전에서 구현되지 않을 수 있으므로 어떤 컴파일러와 버전에 대해 이야기하고 있는지 구체적으로 설명하십시오.

도움이 되었습니까?

해결책

다른 모든 사람들이 제안한 pedantic 오류 외에도 IMO, 컴파일 프로세스의 일부로 보풀을 실행하는 것이 좋습니다.

몇 가지 도구가 있습니다.

그들은 당신의 시간을 많이 절약 할 것입니다.

다른 팁

Pedantic 경고를 오류로 만들 수 있습니다 -pedantic-errors. 이를 통해 개발자가 무시하지 못하게됩니다. 그 문제에 대해 당신은 모든 경고를 오류로 만들 수 있습니다. -Werror 그것은 어떤 경우에는 생산성이 높을 수 있지만 (아마도 당신의 경우에는 아닐 수도 있음).

전반적으로, 나는 엄격한 표준을 준수하는 한 -pedantic 옵션이 가장 유용합니다.

-페이틱 오류.

자세한 내용을보십시오 GCC (1).

아래 줄을 마스터 cmake 파일에 복사하여 붙여 넣습니다. 아래 줄은 자신을 더 엄격하게 테스트하기 위해 거의 가장 유용한 컴파일러 플래그로 구성됩니다.

set(CMAKE_CXX_FLAGS "-O0 -fno-elide-constructors -pedantic-errors -ansi -Wextra -Wall     -Winit-self -Wold-style-cast -Woverloaded-virtual -Wuninitialized -Wmissing-declarations    -Winit-self -std=c++98")

cmake를 사용하지 않으면 이중 인용문으로 플래그를 복사하고 컴파일러로 보내십시오.

만큼 잘 -pendantic 당신은 또한 a -std 스위치. 더 엄격한 컴파일이 필요한 경우 어떤 표준을 준수 해야하는지 알아야합니다. 일반적으로 현재 C ++의 경우입니다 -std=c++98. ( -ansi C ++ 모드에서 유사한 기능을 수행하지만 -std= 더 명확합니다.)

비슷한 상황에서 우리는 포기하고 이사했습니다 에이스 프레임 워크, 플랫폼의 차이를 숨기고 있습니다.

나는 썼다 블로그 게시물 몇 가지 옵션을 조사한 후이 주제에 대해. 또한 다른 라이브러리를 사용하는 경우를 처리해야하지만 엄격한 편집을 따르지 않습니다. 다행히도 쉽게 처리 할 수있는 방법이 있습니다. 나는 모든 프로젝트에서 이것을 광범위하게 사용하고 있습니다.

요컨대, 다음과 같은 컴파일러 옵션을 사용하여 매우 엄격한 모드를 켜십시오 (아래는 cmakelists.txt에 넣는 것) :

set(CMAKE_CXX_FLAGS "-std=c++11 -Wall -Wextra  -Wstrict-aliasing -pedantic -fmax-errors=5 -Werror -Wunreachable-code -Wcast-align -Wcast-qual -Wctor-dtor-privacy -Wdisabled-optimization -Wformat=2 -Winit-self -Wlogical-op -Wmissing-include-dirs -Wnoexcept -Wold-style-cast -Woverloaded-virtual -Wredundant-decls -Wshadow -Wsign-promo -Wstrict-null-sentinel -Wstrict-overflow=5 -Wswitch-default -Wundef -Wno-unused -Wno-variadic-macros -Wno-parentheses -fdiagnostics-show-option ${CMAKE_CXX_FLAGS}")

코드의 특정 부분에 대한이 엄격한 모드를 켜고 끄는 방법에 대한 자세한 내용은 다음을 참조하십시오. http://shitalshah.com/p/how-to-enable-and-us-gcc-strict-mode-compilation/

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top