문제

C ++ 애플리케이션을 개발하는 동안 나는 타사 라이브러리를 사용하여 사용중인 무해한 #Pragma 지시문과 관련된 막대한 경고를 생성해야했습니다.

../File.hpp:1: warning: ignoring #pragma ident
In file included from ../File2.hpp:47,
                 from ../File3.hpp:57,
                 from File4.h:49,

GNU C ++ 컴파일러를 사용할 때 이러한 종류의 경고를 비활성화 할 수 있습니까?

도움이 되었습니까?

해결책

나는 당신이 컴파일 할 수 있다고 생각합니다

-Wno-unknown-pragmas

이것을 억제합니다.

다른 팁

GCC에서 -wno-unknown-pragmas로 컴파일하십시오

MS Visual Studio 2005에서 (이 질문에는 GCC로 태그가 지정되지 않았으므로 참조를 위해 이것을 추가하고 있습니다) 프로젝트 설정-> c/c ++-> advanced에서 전 세계적으로 비활성화 할 수 있습니다. "특정 경고 비활성화"에 4068을 입력하십시오.

또는이 파일에 추가하여 로컬로 경고를 비활성화 할 수 있습니다.

#pragma warning (disable : 4068 ) /* disable unknown pragma warnings */

아마도 볼 수 있습니다 GCC 진단 pragmas? 또는이 경우 사용할 수 있습니다 옵션의 조합 저것 -Wall 제외를 활성화합니다 -Wunknown-pragmas.

팁을 주신 모든 분들께 감사드립니다. 제 경우에는 QT Mingw와 함께 일합니다. .pro 파일에서 다른 방법으로 플래그를 설정해야합니다.

QMAKE_CXXFLAGS_WARN_ON += -Wno-unknown-pragmas

문제는 GCC에 관한 것이지만, 가능한 한이를 가능하게하고자하는 사람들에게는 다음과 같습니다.

이 경고를 방출 할 수있는 대부분의 컴파일러는 명령 행 (예외 : PGI) 또는 코드 (예외 : DMC)에서 경고를 비활성화하는 방법이 있습니다.

  • GCC : -Wno-unknown-pragmas / #pragma GCC diagnostic ignored "-Wunknown-pragmas"
  • 그 소리: -Wno-unknown-pragmas / #pragma clang diagnostic ignored "-Wunknown-pragmas"
  • 인텔 C/C ++ 컴파일러 : -diag-disable 161 / #pragma warning(disable:161)
  • PGI : #pragma diag_suppress 1675
  • MSVC : -wd4068 / #pragma warning(disable:4068)
  • ti : --diag_suppress,-pds=163 / #pragma diag_suppress 163
  • IAR C/C ++ 컴파일러 : --diag_suppress Pe161 / #pragma diag_suppress=Pe161
  • 디지털 화성 C/C ++ 컴파일러 : -w17

이 대부분을 단일 매크로로 결합하여 코드에 사용하는 것입니다. HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS 매크로 Hedley:

#if HEDLEY_HAS_WARNING("-Wunknown-pragmas")
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("clang diagnostic ignored \"-Wunknown-pragmas\"")
#elif HEDLEY_INTEL_VERSION_CHECK(16,0,0)
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("warning(disable:161)")
#elif HEDLEY_PGI_VERSION_CHECK(17,10,0)
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 1675")
#elif HEDLEY_GNUC_VERSION_CHECK(4,3,0)
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("GCC diagnostic ignored \"-Wunknown-pragmas\"")
#elif HEDLEY_MSVC_VERSION_CHECK(15,0,0)
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:4068))
#elif HEDLEY_TI_VERSION_CHECK(8,0,0)
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163")
#elif HEDLEY_IAR_VERSION_CHECK(8,0,0)
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress=Pe161")
#else
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS
#endif

Hedley는이 답변보다 더 완전한 정보를 가질 수 있습니다.이 답변을 업데이트하는 것을 잊어 버릴 것입니다. 따라서 Hedley를 사용하고 싶지 않다면 (단일 공개 도메인 C/C ++ 헤더입니다. ) 위의 정보 대신 Hedley를 가이드로 사용하고 싶을 수도 있습니다.

버전 검사는 아마도 비관적이지만 때로는 독점적 인 컴파일러의 쓸모없는 버전에 대한 정보를 얻기가 어렵 기 때문에 미안보다 안전합니다. 다시, Hedley의 정보가 더 나을 수 있습니다.

많은 컴파일러는 또한 스택에 경고를 푸시/팝 할 수 있으므로 푸시하고 제어하지 않는 코드를 포함시키기 전에 비활성화 할 수 있습니다. 당신의 코드는 여전히 문제의 경고를 트리거합니다 (따라서 정리할 수 있음). Hedley에는 마크로가 있습니다. HEDLEY_DIAGNOSTIC_PUSH / HEDLEY_DIAGNOSTIC_POP.

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