Programing

특정 포함 파일에 대한 경고를 비활성화하는 방법은 무엇입니까?

lottogame 2020. 11. 11. 07:52
반응형

특정 포함 파일에 대한 경고를 비활성화하는 방법은 무엇입니까?


특정 포함 파일에 의해 직접 또는 간접적으로 포함 된 모든 파일에 대해 특정 경고를 비활성화하고 싶습니다. 예를 들어,에 포함 된 파일에 포함 된 모든 파일 또는 파일에 대해 "문자열 리터럴을 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는 시스템 헤더에서 발견 된 코드를 특별 처리합니다. #warningGCC가 시스템 헤더를 처리하는 동안에는 (진단 참조) 생성 된 경고를 제외한 모든 경고 가 표시되지 않습니다. 시스템 헤더에 정의 된 매크로는 확장 될 때마다 몇 가지 경고에 영향을받지 않습니다. 이 내성은 시스템 헤더에 정의 된 매크로의 코드로 인해 경고가 많은 오탐을 생성하는 경우 임시로 부여됩니다.

[...]

또한 #pragma GCC system_headerGCC에게 현재 포함 파일의 위치에 관계없이 시스템 헤더의 나머지 부분을 고려하도록 지시 하는 지시문이 있습니다 . #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

반응형