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内容移出 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 <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 回答