サードパーティのライブラリで警告C4505を回避するにはどうすればよいですか?

私はいくつかのハッシュ関数に対してCrypto ++を使用するプロジェクトを持っています。最近、私は物事をきれいにして、MSVC ++で警告レベル4を使用することに決めました。

私のソースは次のようになります:

#pragma warning(push)
#pragma warning(disable: 4100) //Unreferenced formal parameter
#pragma warning(disable: 4244) //Conversion, possible loss of data
#pragma warning(disable: 4512) //Assignment operator could not be generated
#pragma warning(disable: 4127) //Conditional expression is constant
#pragma warning(disable: 4505) //Unreferenced local function has been removed
#define CRYPTOPP_ENABLE_NAMESPACE_WEAK 1
#include 
#include 
#pragma warning(pop)

disable:4505 にもかかわらず、私はまだこの警告を受け取ります:

c:\cppdev\cryptopp561\cryptopp\misc.h(548): warning C4505: 'CryptoPP::StringNarrow' : unreferenced local function has been removed

私のプロジェクトは構築されません。

これを回避するにはどうしたらいいですか?基本的には、第三者コードの警告を無効にしたいだけです。私はそうしないとエラーを修正するためにcryptopp自身を編集したくありません。

11
@ tylo42:多くのプロジェクトで「警告をエラーとして処理する」オプションが設定されています
追加された 著者 Vlad,
警告は、建物からのあなたを止めるべきではない、そうですか?
追加された 著者 Tyler Hyndman,
@ Vlad:ありがとう、私はそのオプションを認識していませんでした。
追加された 著者 Tyler Hyndman,

2 答え

コンパイラは、コンパイルされたソースファイルの解析が終了した後でのみ、参照されていない関数を判別することができます。対応する #pragma disable をpush/popスコープの外に移動して、ファイルの最後に有効にします。

#pragma warning(push)
#pragma warning(disable: 4100) //Unreferenced formal parameter
#pragma warning(disable: 4244) //Conversion, possible loss of data
#pragma warning(disable: 4512) //Assignment operator could not be generated
#pragma warning(disable: 4127) //Conditional expression is constant
#define CRYPTOPP_ENABLE_NAMESPACE_WEAK 1
#include 
#include 
#pragma warning(pop)
#pragma warning(disable: 4505) //Unreferenced local function has been removed
18
追加された
これにより、サードパーティのコードだけでなく、自分のコードに対する警告が無効になります。
追加された 著者 Billy ONeal,
@ハンス:さて、あなたは何を提案していますか?私は独自のコンパイルドメインに分離することができます。ヘッダーはできません。
追加された 著者 Billy ONeal,
@ハンス:ああ、私は参照してください。それはうまくいくかもしれない。
追加された 著者 Billy ONeal,
MSによると、これはプラグマを使用して行うことはできません: support.microsoft.com/kb/947783この場合、この方法でコンパイラをサイレントにすることができますが、これはおそらくその場ではうまくいきません:void useUnreferenced(){void * dummyReferenceStringNarrow = CryptoPP :: StringNarrow; (void)dummyReferenceStringNarrow; }
追加された 著者 Tobiesque,
これは正しいです。第三者のコードを孤立させる方法がありますが、#includeはそのうちの一つではありません。
追加された 著者 Hans Passant,
余分な間接的なレベルですべての問題が解決されます。それはここに適切な古い馬で、ラッパーを書く。
追加された 著者 Hans Passant,
@BillyONeal:はい、コンパイラはコードをコンパイルするまでこの警告を出さないので、単純にすべてまたは何もしないと言っています。
追加された 著者 GManNickG,

いくつかのハッシュ関数が必要な場合は、craptoヘッダーをインクルードして独自のヘッダーファイルを作成して使用する関数プロトタイプを定義するために、4505を無効にした個別のソースファイルを作成します。

1
追加された
Lol @ crapto。おそらく、私はもっと良いmd5 + shaライブラリを探すべきでしょう。
追加された 著者 Billy ONeal,