web-dev-qa-db-ja.com

Visual C ++で外部ヘッダーの警告を抑制する方法

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

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

56
Bob Whiteman

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

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

#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 ) 
79
Brian R. Bondy

Visual C++チームは、外部ヘッダーの警告レベルのサポートを追加しました。詳細はブログの記事 Broken Warnings Theory をご覧ください。

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

その投稿の下のコメントに加えて、 その投稿のredditアナウンス にも役立つディスカッションがあります。

11
solodon

Visual C++で差別化できるとは思いません。インクルードの周りに#pragma warningを使用することで、偽造できます。

#pragma warning(Push, 0)
#include "mywarningheader.h"
#pragma warning(pop)
4
Dan Story