번역 단위의 일부에 대해서만 GCC 경고를 선택적으로 비활성화 하시겠습니까?
이 MSVC 전 처리기 코드와 가장 가까운 GCC는 무엇입니까?
#pragma warning( push ) // Save the current warning state.
#pragma warning( disable : 4723 ) // C4723: potential divide by 0
// Code which would generate warning 4723.
#pragma warning( pop ) // Restore warnings to previous state.
특정 경고를 생성하지 않으려는 일반적으로 포함 된 헤더에 코드가 있습니다. 그러나 우리는 해당 헤더를 포함하는 파일이 계속해서 경고를 생성하기를 원합니다 (프로젝트에 경고가 활성화 된 경우).
이는 GCC 버전 4.6 이후 또는 2010 년 6 월경 트렁크에서 가능합니다.
예를 들면 다음과 같습니다.
#pragma GCC diagnostic push
#pragma GCC diagnostic error "-Wuninitialized"
foo(a); /* error is given for this one */
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wuninitialized"
foo(b); /* no diagnostic for this one */
#pragma GCC diagnostic pop
foo(c); /* error is given for this one */
#pragma GCC diagnostic pop
foo(d); /* depends on command line options */
가장 가까운 것은입니다 GCC 진단 프라 그마 , #pragma GCC diagnostic [warning|error|ignored] "-Wwhatever"
. 원하는 것과 매우 가깝지 않으며 자세한 내용과 경고는 링크를 참조하십시오.
비슷한 일을했습니다. 타사 코드의 경우 경고를 전혀보고 싶지 않았습니다. 그래서, 지정하기보다는 -I/path/to/libfoo/include
, 내가 사용 -isystem /path/to/libfoo/include
. 이로 인해 컴파일러는 경고 목적으로 해당 헤더 파일을 "시스템 헤더"로 취급하고를 활성화하지 않는 한 -Wsystem-headers
대부분 안전합니다. 나는 아직도 거기에서 몇 가지 경고가 누출되는 것을 보았지만 대부분의 쓰레기를 줄입니다.
이것은 include-directory로 문제가되는 코드를 분리 할 수있는 경우 에만 도움 이 됩니다 . 자체 프로젝트의 하위 집합이거나 다른 코드와 혼합되어 있으면 운이 좋지 않습니다.
이것은 Matt Joiner의 답변에 대한 확장 입니다.
코드 전체에 pragma를 생성하지 않으려면 _Pragma 연산자를 사용할 수 있습니다 .
#ifdef __GNUC__
# define DIAGNOSTIC_ERROR(w) _Pragma("GCC diagnostic error \"" w "\"")
# define DIAGNOSTIC_IGNORE(w) _Pragma("GCC diagnostic ignore \"" w "\"")
# define DIAGNOSTIC_PUSH _Pragma("GCC diagnostic push")
# define DIAGNOSTIC_POP _Pragma("GCC diagnostic pop")
#endif
// (...)
DIAGNOSTIC_ERROR("-Wuninitialized")
foo(a); // Error
DIAGNOSTIC_PUSH
DIAGNOSTIC_IGNORE("-Wuninitialized")
foo(a); // No error
DIAGNOSTIC_POP
foo(a); // Error
'development' 카테고리의 다른 글
Swift : 스위치 케이스의 옵션 값에 대한 테스트 (0) | 2020.09.24 |
---|---|
git에서 커밋을 스쿼시한다는 것은 무엇을 의미합니까? (0) | 2020.09.24 |
Xcode에서 기본 헤더 주석 라이센스 변경 (0) | 2020.09.24 |
IN 절의 매개 변수 목록이있는 PreparedStatement (0) | 2020.09.24 |
Android NDK에 벡터와 같은 C ++ 헤더를 포함 할 수 없습니다. (0) | 2020.09.24 |