2017-11-28 15 views
1

私はVisual Studio 2017を実行しています。私はプロジェクトにChaiScriptというスクリプト言語を追加しようとしていますが、/ Wallをオンにしているときには、私はまた、警告をエラーとして扱っています(私はこのようにとどまることを好みます)。Visual Studioでのコンパイル警告を一時的に無効にする

私は、ChaiScriptヘッダーファイル(1つのファイルのみを含める必要があります)を含めるときに、すべての警告を一時的に無効にしようとしていると考えました。最初は、私はこれをしなかった...

#pragma warning(disable : 4061) 
#pragma warning(disable : 4068) 
#pragma warning(disable : 4191) 
#pragma warning(disable : 4355) 
#pragma warning(disable : 4365) 
#pragma warning(disable : 4371) 
#pragma warning(disable : 4464) 
#pragma warning(disable : 4514) 
#pragma warning(disable : 4571) 
#pragma warning(disable : 4623) 
#pragma warning(disable : 4625) 
#pragma warning(disable : 4626) 
#pragma warning(disable : 4668) 
#pragma warning(disable : 4710) 
#pragma warning(disable : 4774) 
#pragma warning(disable : 4820) 
#pragma warning(disable : 5026) 
#pragma warning(disable : 5027) 
#include <chaiscript\chaiscript.hpp> 

これは動作しますが、私はコンパイルすることができます...しかし、私は、だから私はなって....これらの警告は、コンパイルプロセスの残りのために再び有効になっていると思いましたこの中にそれ...

#pragma warning(push) 
#pragma warning(disable : 4061) 
#pragma warning(disable : 4068) 
#pragma warning(disable : 4191) 
#pragma warning(disable : 4355) 
#pragma warning(disable : 4365) 
#pragma warning(disable : 4371) 
#pragma warning(disable : 4464) 
#pragma warning(disable : 4514) 
#pragma warning(disable : 4571) 
#pragma warning(disable : 4623) 
#pragma warning(disable : 4625) 
#pragma warning(disable : 4626) 
#pragma warning(disable : 4668) 
#pragma warning(disable : 4710) 
#pragma warning(disable : 4774) 
#pragma warning(disable : 4820) 
#pragma warning(disable : 5026) 
#pragma warning(disable : 5027) 
#include <chaiscript\chaiscript.hpp> 
#pragma warning(pop) 

は今、私は当時、これらの警告のチェックに行く、それは警告なしヘッダをコンパイルしまうので、これはそれを作るだろうと思った....が、後に、私はこれを行うようです...私はまだ4つのC4710の警告を得る...私は何か間違っている?

https://i.imgur.com/RuxboQC.png

+0

別の場所には、原稿が含まれていますか?私はあなたがchaiscriptを含めることを始める前にあなたが自由に警告していたと思いますか? – Tas

+0

文字通り、私のプログラムは上記のコードを持つ空の.hファイルであり、.hファイルを含む.cppです。私はちょうど4つの警告にエラーを取得することができた、私のポストを更新しました。そうではありません。 – Rick

+0

リンク時にインライン展開が行われた場合、リンカが '#pragma warning'をどのように解釈するかは直感的ではありません。たとえば、ソースファイル(このヘッダーを含む)がコンパイルされた後、リンクが正常に行われます。その時、 '#pragma warning(pop)'が見つかりコンパイルされました。 VSがいつインライン展開を実行するかはわかりませんが。 –

答えて

0

インクルードには、後に(ポップ)すべて無効と#pragma警告の前に#pragma警告(プッシュ、3)を追加します。

0

この特定のケースでは、関数定義をコンパイルするときに警告が無効になっていたにもかかわらず、コンパイラがインライン展開のオプションを持っていた場所で警告が再度有効になっていた可能性があります。それには実際的な解決策はないようです。

マイクロソフトはwarnings that are off-by-defaultをリストしています。 /W4/Wallの相違点は、/Wallは、既定のオフライン警告を有効にすることです。 off-by-defaultの警告はデフォルト値ではありません。なぜなら、値が低いか、誤検知が多いからです。場合によっては/Wallでプロジェクトをチェックして有益な情報があるかどうかを確認することは有益ですが、常に有効にすることは現実的ではありません。

私は実用レベルの警告レベルを押し上げるのが大好きですが、/Wallは私にとっては遠すぎるステップです。どこでも/WX/W4をお勧めします。サードパーティのコードに必要な場合は、図のように#pragma warning(push/pop)を使用して/W3にドロップします。私の経験上、すべてのMicrosoftヘッダーは/W4できれいにコンパイルされています。

関連する問題