특정 포함 파일에 대한 경고를 비활성화하는 방법은 무엇입니까?
특정 포함 파일에 의해 직접 또는 간접적으로 포함 된 모든 파일에 대해 특정 경고를 비활성화하고 싶습니다. 예를 들어,에 포함 된 파일에 포함 된 모든 파일 또는 파일에 대해 "문자열 리터럴을 char *에 할당합니다"라는 경고를 비활성화하고 싶습니다 #include <bar/*>
(제 경우 별표는 "여기에 모든 것이있을 수 있음"을 의미 함).
그 이유는 내가 프로그래밍해야하는 일부 사람들은 "const"를 사용할 수 없기 때문에 결국 특정 문자열 리터럴 남용에 대해 많은 경고를받습니다. 나는 그들의 코드에서 나오는 수천 개의 경고를 무시하고 싶습니다. 그래서 내 코드의 실수에 집중하고 수정할 수 있습니다.
Intel C ++ 및 GCC를 사용합니다. 내 친구 중 일부는 clang을 사용하므로 이에 대한 해결책을 듣고 기뻐할 것입니다.
GCC를 사용할 때 -isystem
플래그 대신 -I
플래그를 사용하여 해당 위치에서 경고를 비활성화 할 수 있습니다.
따라서 현재 사용중인 경우
gcc -Iparent/path/of/bar …
사용하다
gcc -isystem parent/path/of/bar …
대신. 불행히도 이것은 특별히 세분화 된 제어가 아닙니다. 좀 더 표적화 된 메커니즘을 알지 못합니다.
더 나은 GCC 솔루션 : #pragma를 사용하십시오.
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-W<evil-option>"
#include <evil_file>
#pragma GCC diagnostic pop
예를 들면 :
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-local-typedefs"
#include <QtXmlPatterns>
#pragma GCC diagnostic pop
내가 사용할 때 & co의 g++
일반적인 기본값으로 수많은 경고를 생성하는 타사 헤더가 -Wall -Wextra
있습니다. 나는 그들을 별도의 포함으로 그룹화하는 경향이 있습니다 .system_header
#pragma
[...] GCC는 시스템 헤더에서 발견 된 코드를 특별 처리합니다.
#warning
GCC가 시스템 헤더를 처리하는 동안에는 (진단 참조) 생성 된 경고를 제외한 모든 경고 가 표시되지 않습니다. 시스템 헤더에 정의 된 매크로는 확장 될 때마다 몇 가지 경고에 영향을받지 않습니다. 이 내성은 시스템 헤더에 정의 된 매크로의 코드로 인해 경고가 많은 오탐을 생성하는 경우 임시로 부여됩니다.[...]
또한
#pragma GCC system_header
GCC에게 현재 포함 파일의 위치에 관계없이 시스템 헤더의 나머지 부분을 고려하도록 지시 하는 지시문이 있습니다 .#pragma
파일에서 앞에 오는 코드는 영향을받지 않습니다.#pragma GCC system_header
기본 소스 파일에는 영향을주지 않습니다.
이 솔루션이 -isystem
더 세밀하고 명령 줄 인수와 포함 디렉터리를 너무 많이 사용하지 않고 소스에 직접 넣을 수 있기 때문에이 솔루션을 선호합니다 .
끔찍한 루트 라이브러리의 예 :
#ifndef ROOTHEADERS_HPP_INCLUDED
#define ROOTHEADERS_HPP_INCLUDED
#ifdef __GNUC__
// Avoid tons of warnings with root code
#pragma GCC system_header
#endif
#include "TH1F.h"
#include "TApplication.h"
#include "TGraph.h"
#include "TGraph2D.h"
#include "TCanvas.h"
#endif
가장 간단한 해결책은 파일 이름과 경고 유형에 따라 컴파일러를 호출하고, 컴파일하고, 원하지 않는 출력을 제거하는 간단한 스크립트를 작성하는 것입니다. 컴파일러마다 다른 스크립트를 사용할 수 있습니다.
컴파일러를 직접 호출하는 대신이 스크립트를 사용하도록 makefile을 업데이트하십시오.
참고 URL : https://stackoverflow.com/questions/6321839/how-to-disable-warnings-for-particular-include-files
'Programing' 카테고리의 다른 글
응용 프로그램 대 세션 대 캐시 (0) | 2020.11.11 |
---|---|
Git http-안전하게 자격 증명 기억 (0) | 2020.11.11 |
Java 8 Streams가 컬렉션의 항목에서 작동 한 다음 제거 할 수 있습니까? (0) | 2020.11.11 |
div에 스크롤 막대를 어떻게 추가합니까? (0) | 2020.11.11 |
이 오류를 포착하는 방법 : "알림 : 정의되지 않은 오프셋 : 0" (0) | 2020.11.11 |