私が使用しているときに、通常のデフォルトの&cog++
で大量の警告を生成するサードパーティのヘッダーがあります。-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