什么是用于关闭 #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 编译开关?的主要内容,如果未能解决你的问题,请参考以下文章

带有注释(pragma)的仪器 C 代码用于性能跟踪

C++ 一种禁止方法被使用的宏

C++ 一种禁止方法被使用的宏

Visual中#pragma comment(user)和gcc中#pragma Comment的目的

C++ 一种禁止成员方法被使用的宏

关闭 C4996 警告(_CRT_SECURE_NO_DEPRECATE)