#pragma 경고를 비활성화하는 방법은 무엇입니까?
-
02-07-2019 - |
문제
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
.