67

新しいBREWプロジェクトを開始しています。アプリケーションコードをきれいに保つために、警告レベル4(/ W4)でコンパイルしたいと思います。問題は、BREWヘッダー自体が/W4で正常にコンパイルされないことです。

gccでは、-Iと-isystemを使用して、アプリケーションヘッダーとシステムヘッダーを区別できます。デフォルトでは、gccはシステムヘッダーにコンパイル警告を報告しません。Visual C ++に同等のメカニズムはありますか?

4

4 に答える 4

109

このメソッドは、変更できないが含める必要があるヘッダーのブロックの周囲でのみ使用してください。

次のように、すべての警告を選択的に一時的に無効にすることができます。

#pragma warning(push, 0)        
//Some includes with unfixable warnings
#pragma warning(pop)

0の代わりに、オプションで警告番号を渡して無効にすることができます。たとえば、次のようになります。

#pragma warning( push )
#pragma warning( disable : 4081)
#pragma warning( disable : 4706 )
// Some code
#pragma warning( pop ) 
于 2010-03-29T23:45:47.960 に答える
22

Visual C ++チームは、外部ヘッダーの警告レベルのサポートを追加しました。あなたは彼らのブログ投稿で詳細を見つけることができます:壊れた警告理論

本質的には、ここでの提案が手動で行うことを推奨していたことを自動的に実行します。#includeディレクティブの直前に新しい警告レベルをプッシュし、直後にポップアップします。外部ヘッダーの場所を指定する追加のフラグ、すべての<>インクルードを外部として扱うフラグ、#pragma system_header、およびClangまたはGCC(この記事の執筆時点)では利用できない機能があり、テンプレートのインスタンス化スタック全体で外部ヘッダーの警告を確認できます。テンプレートはユーザーコードでインスタンス化されました。

その投稿の下のコメントに加えて、その投稿のredditアナウンスでいくつかの有用な議論を見つけることもできます。

于 2017-12-22T01:01:52.700 に答える
6

VisualC++で差別化できるとは思いません。#pragma warningインクルードの周りを使用してそれを偽造することができます:

#pragma warning(push, 0)
#include "mywarningheader.h"
#pragma warning(pop)
于 2010-03-29T23:51:26.760 に答える
3

これには答えがあるようです。

この投稿/external:Iでは、特別な警告セットを含むヘッダーを含めるために使用できることについて説明しています。

自分でテストしたことはありませんが、ブログ投稿は2017年のものです。

于 2021-03-11T18:41:14.710 に答える