Visual Studio 2015 不会抑制错误 C4996

Posted

技术标签:

【中文标题】Visual Studio 2015 不会抑制错误 C4996【英文标题】:Visual Studio 2015 won't suppress error C4996 【发布时间】:2016-06-27 18:04:40 【问题描述】:

Visual Studio 2015 Community Edition 在 debug 中编译时出现以下错误,但在 release 中编译时没有:

std::copy::_Unchecked_iterators::_Deprecate': Call to 'std::copy' with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators'

我能够将此错误的根源追溯到我用来编写位图图像的this third party library 的第 214 和 242 行。我不完全了解这些部分发生了什么,所以我宁愿不要乱搞。


我正在尝试禁用此错误,但 Visual Studio 不允许。我在 *** 或其他地方尝试了 in the documentation 建议的以下解决方案:

在项目设置 > 配置属性 > C/C++ > 高级中的“禁用特定警告”字段中添加4996。 将/wd4996 添加到“项目设置”>“配置属性”>“调试”中的“命令参数”字段中。 在有问题的文件顶部和/或有问题的函数上方添加#pragma warning (disable : 4996)。 将_SCL_SECURE_NO_WARNINGS_SCL_NONSTDC_NO_WARNINGS_SCL_OBSOLETE_NO_WARNINGS_SCL_SECURE_NO_WARNINGS_GLOBAL 及其组合添加到“项目设置”>“配置属性”>“C/C++”>“预处理器”中的“预处理器定义”字段。 使用 #define 指令将先前解决方案中的定义添加到有问题的文件的顶部。 将上一个解决方案中的定义添加到“命令参数”字段中,但以/D-D 为前缀。

但这些都不能解决我的问题。


Visual Studio 一直坚持显示此错误的原因可能是什么?

【问题讨论】:

等等,你有没有尝试#define -D_SCL_SECURE_NO_WARNINGS #pragma warning 之后的空格是否有问题?你清理过项目吗?对不起,只是把想法扔在那里以防万一:/ @Rakete1111 如果我尝试这样做,它会告诉我它在- 处“需要一个标识符”。如果没有-,它仍然会给出错误。 @meepzh 我已经尝试过在warning 和冒号周围使用和不使用空格,但它不能解决它。清理解决方案和项目,重新构建也不能解决问题。 您链接到的 msdn 文档页面有一个关于 _ITERATOR_DEBUG_LEVEL 和 Checked Iterators 的特别说明(和示例)。 【参考方案1】:

定义 NO_WARN_MBCS_MFC_DEPRECATION

【讨论】:

嗨,这需要更多上下文才能成为有用的答案。 嗯,不是真的,本。如何定义宏 - 命令行选项、#define 等等并不重要。定义这个,警告就会消失【参考方案2】:

禁用警告 4996 对 std::copy 警告没有影响。要禁止此警告,请将以下内容放在源文件的顶部:

#define _SECURE_SCL_DEPRECATE 0
#include <algorithm>

【讨论】:

【参考方案3】:

将 _CRT_NONSTDC_NO_WARNINGS 添加到预处理器定义中。

【讨论】:

【参考方案4】:

在您的 stdafx.h 中:

#pragma warning( push )
#pragma warning( disable: 4996)
#include <algorithm>
#pragma warning( pop )

为我工作 VS2015 更新 3

【讨论】:

以上是关于Visual Studio 2015 不会抑制错误 C4996的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2015不会禁止错误C4996

如何在 Visual Studio 2008 中抑制特定的 CSS 2.0 验证错误?

使用Visual Studio 2015构建.vdproj不会创建输出文件(.msi)

Visual Studio 2015发布失败

在 Visual Studio 中抑制 tlbimp 警告

Visual Studio Online 上的远程分支不会出现在 Visual Studio 2015 Team Explorer 上