当我使用g++
和时,我有第三方标头,它们使用通常的默认值-Wall -Wextra
&co生成大量警告。我倾向于将它们分为单独的include,并指定。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__
#pragma GCC system_header
#endif
#include "TH1F.h"
#include "TApplication.h"
#include "TGraph.h"
#include "TGraph2D.h"
#include "TCanvas.h"
#endif