#pragma 경고 푸시 / 팝을 사용하여 일시적으로 경고 수준을 변경하는 것이 올바른 방법입니까?
가끔 경고를 전혀 발생시키지 않는 C ++ 코드를 작성하기가 어렵습니다. 그러나 경고를 활성화하는 것은 좋은 생각입니다. 따라서 특정 구성에 대한 경고를 비활성화하고 다른 모든 코드에서 활성화되도록해야하는 경우가 많습니다.
지금까지 두 가지 방법을 보았습니다.
첫 번째는 사용하는 것입니다 #pragma warning( push )
및 #pragma warning( pop )
:
#pragma warning( push )
#pragma warning( disable: ThatWarning )
//code with ThatWarning here
#pragma warning( pop )
두 번째는 다음을 사용하는 것입니다 #pragma warning( default )
.
#pragma warning( disable: ThatWarning )
//code with ThatWarning here
#pragma warning( default: ThatWarning )
두 번째 변형에서 볼 수있는 문제는 원래 경고 수준을 버린다는 것입니다. 경고가 그 전에 꺼 졌거나 경고 수준이 변경되었을 수 있습니다. 사용하면 default
이러한 변경 사항이 삭제됩니다.
첫 번째 접근 방식은 깨끗해 보입니다. 그것에 문제가 있습니까? 더 나은 방법이 있습니까?
첫 번째 방법은이를 수행하는 가장 좋은 방법 인 IMO입니다. 나는 그것에 문제가 없다는 것을 알고 있습니다.
#pragma는 컴파일러에 따라 다르므로 모든 컴파일러에서 작동 할 것으로 기대하지 마십시오. :)
이것은 여러 컴파일러 (및 다른 버전의 컴파일러)에서 작동합니다.
헤더 "푸시"
#if defined(__clang__)
# pragma clang diagnostic push
#endif
#if defined(_MSC_VER)
# pragma warning(push)
#endif
#if defined(YOUR_FAVORITE_COMPILER)
# pragma your compiler push warning
#endif
헤더 "팝"
#if defined(__clang__)
# pragma clang diagnostic pop
#endif
#if defined(_MSC_VER)
# pragma warning(pop)
#endif
약간의 경고
#if defined(__clang__)
# pragma clang diagnostic ignored "-Wunused-parameter"
# pragma clang diagnostic ignored "-Wunused-variable"
# if __has_warning("-Wnew-special-warning")
# pragma clang diagnostic ignored "-Wnew-special-warning"
# endif
#endif
#if defined(_MSC_VER)
# pragma warning(disable: 4100) // unreferenced formal parameter
# if _MSC_VER > _MSC_SOME_VERSION
# pragma warning(disable: xxxx) // disable one more for special version
# endif
#endif
용법
// This code reports warnings
// ...
#include <ignore_compiler_warning/push>
#include <ignore_compiler_warning/warning_type_1>
#include <ignore_compiler_warning/warning_type_2>
#include <ignore_compiler_warning/warning_type_3>
// This code ignores warnings type_{1,2,3}
// ...
#include <ignore_compiler_warning/pop>
// Back to reporting warnings
// ...
또한 경비원은 이중 푸시 / 팝 / 비활성화 경고 pragma가 없는지 확인할 수 있습니다.
최신 정보
sharptooth에는 너무 늦었지만 모든 Google 직원에게는 다음과 같습니다.
#pragma warning ( suppress: ThatWarning )
// one single line with ThatWarning
의 약자입니다 (일반적으로 VS 2008 이후 이지만 VS 2005 에서는 코드 분석기 경고에만 해당) :
#pragma warning ( push )
#pragma warning ( disable: ThatWarning )
// one single line with ThatWarning
#pragma warning ( pop )
올바른 접근 방식 (조금 못 생겼지 만)
#ifdef _MSC_VER
#pragma warning( push )
#pragma warning( once: ThatWarning )
#endif
//code with ThatWarning here
#ifdef _MSC_VER
#pragma warning( pop )
#endif
You can disable specific warnings in the project or file options and this setting applies as the 'default' per those #pragmas at the relevant scope. Some of the warnings in VS2005 are so useless/annoying that this cleans up the output quite a bit, if using /W4
.
This is in Properties under Configuration Properties -> C/C++ -> Advanced.
I have no problems with the first variant. May be the better way is to use the following:
#pragma warning( push )
#pragma warning( once: ThatWarning )
//code with ThatWarning here
#pragma warning( pop )
This will let you know that there're still warnings in the code, but the warning messages will not be so annoying. But that is the matter of taste.
'Nice programing' 카테고리의 다른 글
Docker-Compose를 사용할 때 Django 데이터베이스 마이그레이션을 어떻게 수행합니까? (0) | 2020.11.04 |
---|---|
다변량 하스켈 함수를 만드는 방법은 무엇입니까? (0) | 2020.11.04 |
JSONResult를 문자열로 (0) | 2020.11.04 |
Node.js 및 Microsoft SQL Server (0) | 2020.11.04 |
저장 프로 시저 호출을위한 Spring JDBC 템플릿 (0) | 2020.11.04 |