변환 장치의 일부에 대해서만 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.
일반적으로 포함된 헤더에 특정 경고를 생성하지 않을 코드를 가지고 있다.그러나 이러한 헤더가 포함된 파일이 해당 경고를 계속 생성하기를 원한다(프로젝트에 해당 경고가 활성화된 경우).
이는 버전 4.6 이후 GCC에서 가능하거나 트렁크에서 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"
. 원하는 것과 그다지 가깝지 않으며, 자세한 내용과 주의사항을 보려면 링크를 참조하십시오.
나도 비슷한 일을 한 적이 있다.제3자 코드의 경우, 나는 어떤 경고도 보고 싶지 않았다.그래서, 특정하기 보다는-I/path/to/libfoo/include
, 나는 사용했다.-isystem /path/to/libfoo/include
. 이렇게 하면 컴파일러는 경고를 위해 해당 헤더 파일을 "시스템 헤더"로 처리하며, 사용자가 활성화하지 않는 한-Wsystem-headers
넌 대부분 안전해나는 아직도 그곳에서 몇 개의 경고가 새어나오는 것을 보았지만, 대부분의 쓰레기들을 줄여준다.
이 방법은 위반 코드를 포함 디렉터리로 분리할 수 있는 경우에만 도움이 된다는 점에 유의하십시오.자신의 프로젝트의 일부분일 뿐이거나 다른 코드와 섞여 있다면 운이 없는 것이다.
이것은 맷 조이너의 대답에 대한 확장이다.
만약 당신이 당신의 코드에 실용주의를 퍼뜨리고 싶지 않다면, 당신은 _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
'Programing' 카테고리의 다른 글
iOS는 기가바이트의 데이터를 저장할 때 진행형 웹 앱을 제한하는가? (0) | 2022.05.02 |
---|---|
malloc는 gcc에서 값을 0으로 초기화하는 이유는? (0) | 2022.05.02 |
Vuex 디스패치가 반환되지 않음 (0) | 2022.05.02 |
C에서 char 배열을 복사하는 방법? (0) | 2022.04.29 |
ConcurrentHashMap 대 동기화된 해시맵 (0) | 2022.04.29 |