11

私は通常、プログラミング時に多くの警告を有効にしたいと思っています。ただし、一部のライブラリには、簡単に警告を発生させるコードが含まれています (..、python、Qt、..)。gcc でコンパイルするときは、 -I の代わりに -isystem を使用してそれを黙らせることができます。MS コンパイラで同じことを行うにはどうすればよいですか? #pragma の警告については知っていますが、コンパイラ固有のコードを随所に使用しないソリューションが必要です。特定の警告をオフにできることも知っていますが、それも私が望んでいることではありません。

ところで: isystem はこの質問のタグである必要がありますが、それを行うことは許可されていません..

概要: コードからのすべての警告を表示し、外部コードから警告は表示しないようにしたいと考えています。

4

4 に答える 4

3

これは現在、 の下にあり/experimental:external /external:I system_include_path /external:W0ます。詳細については、 https://blogs.msdn.microsoft.com/vcblog/2017/12/13/broken-warnings-theory/を参照してください。

于 2018-04-20T13:18:03.870 に答える
1

-isystemいいえ、MSVC には同等のものはありません。


cl /? からの出力出力を見てください。:

/wd 警告を無効にする n

/警告 n をエラーとして扱います

/wo は警告 n を 1 回発行します

/w n の警告レベル 1 ~ 4 を設定

これにより、プロジェクト全体の警告が無効になることに注意してください。Qt を使用しているときに、#pragma warning disable を使用してメイン ヘッダーを変更し、最後に再度有効にして、自分のソースのすべての警告を引き続き表示できるようにしたことを覚えています。

著者が彼の質問を編集し、回答を更新しました:コンパイラフラグを使用して警告付きのコードと警告なしのQtコードを取得する方法はありません:「あなたの」コードが何であるかをコンパイラにどのように伝えるのですか?

上記のフラグはファイル レベルでも適用できることに注意してください。これにより、Qt ヘッダーをインクルードするファイルに対してのみ警告を無効にすることができますが、そのファイル内の独自のコードに対して警告を表示することはできません。

だから私は上記の答えにとどまります。あまりきれいではありませんが、それが唯一の方法だと確信しています。Qt ヘッダーの最初と最後で #pragma を使用します。Qt ヘッダーを変更するか (さらに醜い)、次のような侵襲性の低い方法を選択します。

//your source/header file
#include "shutuppqt.h"
#include <QString>
#include "enableallwarnings.h"

例 "shutuppqt.h"

#ifdef MSVC
  #pragma warning ( disable : 4222 ) //or whatever warning Qt emits
#else
  //....
#endif

例 "enableallwarnings.h"

#ifdef MSVC
  #pragma warning ( enable : 4222 ) //or default instead of enable
#else
  //....
#endif
于 2009-11-16T12:51:37.217 に答える
1

MSがこれを取り上げなかった理由はわかりません。https://visualstudio.uservoice.com/forums/121579-visual-studio-2015/suggestions/14717934-add-a-cl-exe-option-for-system-headers-like-gcc-でのみ投票を試すことができます。 s

于 2016-06-24T14:40:57.823 に答える