13

いくつかのハッシュ関数に 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 <cryptopp/md5.h>
#include <cryptopp/sha.h>
#pragma warning(pop)

にもかかわらずdisable: 4505、次の警告が表示されます。

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

私のプロジェクトはビルドされません。

どうすればこれを回避できますか? 基本的には、サードパーティ コードの警告を無効にしたいだけです。避けられるのであれば、エラーを修正するために cryptopp 自体を編集したくありません。

4

2 に答える 2

20

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

#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 <cryptopp/md5.h>
#include <cryptopp/sha.h>
#pragma warning(pop)
#pragma warning(disable: 4505) //Unreferenced local function has been removed
于 2011-11-12T22:49:51.427 に答える
2

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

于 2011-11-13T00:08:54.747 に答える