什么是用于关闭 #pragma deprecated 警告的 Win 编译开关?
Posted
技术标签:
【中文标题】什么是用于关闭 #pragma deprecated 警告的 Win 编译开关?【英文标题】:What is the Win compile switch to turn off #pragma deprecated warning? 【发布时间】:2010-03-11 00:37:31 【问题描述】:使用 Visual Studio .NET 2003 C++ 和 wininet.dll 我看到很多C4995 warnings
More info
感谢任何帮助。
谢谢。
【问题讨论】:
我在使用strsafe.h 需要添加#define STRSAFE_NO_DEPRECATE msdn.microsoft.com/en-us/library/ms647466%28VS.85%29.aspx 【参考方案1】:除了上面的答案,值得一提的是,仅在有限范围内禁用警告通常是一种好习惯(如果您将这些 pragma 放在头文件中,这一点尤其重要):
#pragma warning (disable : 4121) // alignment of a member was sensitive to packing
#include <third-party-header.h>
#pragma warning (default : 4121) // Restore default handling of warning
另一种方法是使用推送/弹出机制。如果您需要禁用 3rd-party 头文件中的一堆警告,这会很方便:
#pragma warning(push)
#pragma warning(disable: 4018) // signed/unsigned mismatch
#pragma warning(disable: 4100) // unreferenced formal parameter
#pragma warning(disable: 4512) // 'class' : assignment operator could not be generated
#pragma warning(disable: 4710) // 'function' : function not inlined
#pragma warning(disable: 4503) // decorated name length exceeded, name was truncated
#include <third-party-header1.h>
#include <third-party-header2.h>
#include <third-party-header3.h>
#include <third-party-header4.h>
#pragma warning(pop)
【讨论】:
请注意,您还可以在一个预处理器指令中禁用多个警告:#pragma warning(disable: 4018 4100)
。话虽如此,我真的喜欢你将禁用每个警告的原因放在它旁边。【参考方案2】:
您可以使用#pragma warning
,如该 MSDN 页面所示:
#pragma warning(disable: 4995)
或者,您可以在项目的属性中关闭整个项目的警告(右键单击项目 -> 属性 -> C/C++ -> 高级 -> 禁用特定警告)。在命令行中使用/wd4995
也可以达到同样的效果。
【讨论】:
在不禁用代码或设置的情况下,还有什么其他方法可以解决这些问题吗?谢谢。 @Tommy:编译器有两个输入:一组命令行参数和你的源文件。如果你想告诉它做某事,你必须在这两个地方之一这样做。以上是关于什么是用于关闭 #pragma deprecated 警告的 Win 编译开关?的主要内容,如果未能解决你的问题,请参考以下文章