이 답변 과 여기에 추가 된 주석은 #pragma
지시문을 사용하여 여러 컴파일러 경고를 비활성화하는 방법을 보여줍니다 .
왜 그렇게하고 싶습니까? 일반적으로 경고는 이유가 있으므로 항상 좋은 이유라고 생각했습니다. 경고를 비활성화해야하는 "유효한 사례"가 있습니까? 지금은 아무것도 생각할 수 없지만 아마도 나뿐 일 것입니다.
이 답변 과 여기에 추가 된 주석은 #pragma
지시문을 사용하여 여러 컴파일러 경고를 비활성화하는 방법을 보여줍니다 .
왜 그렇게하고 싶습니까? 일반적으로 경고는 이유가 있으므로 항상 좋은 이유라고 생각했습니다. 경고를 비활성화해야하는 "유효한 사례"가 있습니까? 지금은 아무것도 생각할 수 없지만 아마도 나뿐 일 것입니다.
답변:
경고를 비활성화 한 상황은 하나뿐입니다. 경고 오류를 고려하여 일반적으로 경고와 함께 해제되지 않습니다. 그러나 고객에서 API를 개발하는 동안 한 응용 프로그램에서 마이그레이션 단계에 필요했으며 다른 응용 프로그램을 라이브러리에 포함해서는 안되는 문제가 발생했습니다.
API의 모든 사용자에게이 메소드를 호출해서는 안된다고 알리는 가장 좋은 방법은 사용하지 않는 것으로 표시하는 것입니다. 그러나 하나의 유효한 유스 케이스는 컴파일 경고로 표시되었습니다.
Eric Lippert는 컴파일러 팀이 경고에 대해 어떻게 생각하는지에 대한 정보를 찾을 수있는 경고에 대한 몇 가지 게시물을 작성했습니다.
다음은 설명서에서 경고를 비활성화하려는 이유를 설명하는 몇 가지 경고입니다.
다른 예에는 여전히 이전 방법을 사용하거나 로컬에서 읽히지 않고 대신 리플렉션을 사용하는 개인 구성원을 사용하려는 경우 감가 상각 방법 사용에 대한 경고가 포함됩니다.
내 경험상 C #은 C ++과 같은 다른 언어보다 경고를 비활성화 할 필요가 없습니다. 에릭 리퍼 트는 자신의 블로그 에서 "코드가 깨지거나 오해의 소지가 있거나 쓸모가 없다"고 거의 확실하게 말할 수있는 상황에 대해서만 경고를 보려고하기 때문이다.
모범 사례를 위해 노력하는 프로젝트의 경우에도 컴파일러 경고를 선택적으로 비활성화해야하는 몇 가지 이유가 있습니다.
-isystem
과 같은 GCC / Clang에도 불구 하고 시스템 헤더의 차이로 인해 무시 될 수있는 경고가 발생하는 경우가있을 수 있습니다 (어쩌면 함수는 시스템간에 부호있는 리턴 값을 가지지 만) -Wsign-compare
. -Wsign-conversion
예를 들어 , 매크로에 캐스트가 누락 된 경우) 경고를 끄십시오 .(void)arg1; (void)arg2; (void)arg3; ...
. 모든 스텁 함수의 본문에 강제 적용하는 것은 도움이되지 않습니다 . 이 경우에는 -Wunused-parameter
하는 것이 좋습니다.이러한 모든 예에, 그것의 경고를 해제하는 것은 실제 버그를 숨길하지 않을 것으로 가정하는 것을 참고, 예를 들면 : -Wredundant-decls
, -Wunused-parameter
, -Wdouble-promotion
, 아마 -Wpedantic
... 그리고 당신이 무슨 일을하는지 알고!
현재 내가 무시하는 유일한 경고는
warning C4290: C++ exception specification ignored except to indicate a function is not __declspec(nothrow)
Microsoft는 C ++ 사양을 구현하지 않으며 (문서는 그렇지 않다고 말합니다!) 함수가 특정 던지기를 선언하도록 허용하고 모든 함수는 throw () 또는 throw (...) 중 하나만 던질 수 있습니다.
HelpViewer 1.1에서 :
A function is declared using exception specification, which Visual C++ accepts but does not implement. Code with exception specifications that are ignored during compilation may need to be recompiled and linked to be reused in future versions supporting exception specifications.