如何解决第三方库中的C4505警告?

14

我有一个项目使用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本身来修复错误。


警告不应该阻止您构建,对吧? - Tyler Hyndman
7
许多项目设置了“将警告视为错误”的选项。 - Vlad
@Vlad:谢谢,我之前不知道有这个选项。 - Tyler Hyndman
2个回答

21
编译器只能在完成解析编译源文件后确定未被引用的函数。将相应的#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

7
这将禁用我的代码的警告,而不仅仅是第三方代码。 - Billy ONeal
1
@BillyONeal:是的,他说这只会是全有或全无的情况,因为编译器只有在代码编译后才会触发此警告。 - GManNickG
2
根据微软的说法,无法使用#pragma完成此操作: http://support.microsoft.com/kb/947783在这种特殊情况下,您可以通过以下方式使编译器静音-但这可能不适用于所有情况:void useUnreferenced() { void* dummyReferenceStringNarrow = CryptoPP::StringNarrow; (void)dummyReferenceStringNarrow ; } - Tobiesque
1
这是正确的。有方法可以隔离糟糕的第三方代码,但 #include 不是其中之一。 - Hans Passant
9
一层额外的间接性能够解决所有问题。这是一个适用于此处的老生常谈,编写一个包装器即可。 - Hans Passant
显示剩余3条评论

2

如果你只需要几个哈希函数,可以创建一个单独的源文件,并禁用4505以包含crapt头文件,然后编写自己的头文件来定义你使用的函数原型。


3
哈哈,垃圾加密。也许我应该找一个更好的md5 + sha库。 - Billy ONeal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接