Visual Studio 2015不会禁止错误C4996

时间:2016-06-27 18:04:40

标签: c++ visual-studio visual-c++ visual-studio-2015

Visual Studio 2015 Community Edition在调试时编译时出现以下错误,但在发布时进行编译则不会出现以下错误:

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不会让我这样做。我尝试了以下在StackOverflow或其他地方建议in the documentation的解决方案:

  • 4996添加到“项目设置”中的“禁用特定警告”字段>配置属性> C / C ++>高级。
  • /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指令将上一个解决方案中的定义添加到有问题的文件的顶部。
  • 将以前解决方案中的定义添加到“{1}}或/D前缀到”命令参数“字段。

但这一切都没有为我解决问题。

Visual Studio可能会继续坚持显示此错误的原因是什么?

4 个答案:

答案 0 :(得分:2)

定义NO_WARN_MBCS_MFC_DEPRECATION

答案 1 :(得分:1)

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

#define _SECURE_SCL_DEPRECATE 0
#include <algorithm>

答案 2 :(得分:0)

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

答案 3 :(得分:0)

在您的stdafx.h中:

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

为我工作VS2015更新3