为什么Visual Studio 2013会发出C4996错误?

67

在之前版本的Visual Studio中,使用像_sleep或strncpy这样的函数只会输出一个警告。但在最新版本中,这突然成为了一个错误:

unexpected error

错误 C4996:'_sleep':此函数或变量已被更新的库或操作系统功能所取代。请考虑使用Sleep。有关详细信息,请参见在线帮助。

我知道我可以通过在代码开头添加#pragma warning(disable: 4996)来禁用它,但是VS试图强制我使用其他函数非常令人恼火。是否有任何方法可以禁用这种行为?

在你提问之前,"将警告视为错误"是禁用的,即使关闭了所有警告,它仍然出错!


你也可以使用 stdext::checked_array_iterator,但它似乎不是标准的。 - jliv902
在VS 2017中,_CRT_NONSTDC_NO_DEPRECATE对我很有用。 - Nick Westgate
6个回答

97

显然,新项目现在默认启用“SDK检查”,将这些警告视为错误。 要禁用它,请转到项目属性 -> 配置属性 -> C / C ++ -> 一般 -> SDL检查 -> 否。


2
禁用SDL检查并未解决我遇到的警告,例如GetVersionEx等一些已废弃的Windows API函数。必须具体禁用警告4996才能修复这些问题。 - Nathan Reed
哇,非常感谢提出这个问题的人和回答的人。它为我解决了错误。 - RaHuL

12

在程序开头输入:

#pragma warning(disable : 4996)

就是这样。


3
这在2013年的原帖中已经提到过了。不确定为什么它会被视为2018年的答案。 - Thomas Weller

5
您可以在 C/C++ > 高级设置 > 禁用特定警告 中禁用特定的警告号码。

3
编译我所参考的所有源代码:
从Visual Studio中默认删除项目中的安全警告(_CRT_SECURE_NO_WARNINGS)(参考链接) 如何使用_CRT_SECURE_NO_WARNINGS(参考链接),kmcnamee的回答。
解决我的问题的视频。https://www.youtube.com/watch?v=qWxGZLjwKL0 显然,安全开发生命周期(SDL)建议检查,包括启用其他安全代码生成功能和额外的安全相关警告作为错误。
解决此问题的步骤是:
1. Go to Project-> "your project name" Properties
2. Under Configuration Properties, go to C/C++
3. Under C/C++, go to Preprocessor 
4. Select Preprocessor Definitions and click on Edit from the dropdown menu
5. In the blank space fill out _CRT_SECURE_NO_WARNINGS

3

补充一下,_CRT_NONSTDC_NO_DEPRECATE 在我的VS2019中有效。仅单独定义_CRT_SECURE_NO_WARNINGS 无法为我清除这个错误(我两者都定义了)。

与其他答案类似,可以通过在解决方案资源管理器中右键单击项目,然后转到属性->配置属性->C/C++->预处理器->预处理器定义->编辑...,然后添加行_CRT_NONSTDC_NO_DEPRECATE来添加。


2

项目 -> 项目名称属性 -> 配置属性 -> C/C++ -> 预处理器 -> 预处理器定义 -> 编辑... 添加行 _CRT_SECURE_NO_WARNINGS


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