Visual Studio 2015无法抑制错误C4996

eqzww0vc  于 2023-04-07  发布在  其他
关注(0)|答案(4)|浏览(168)

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,在StackOverflow或其他地方:

  • 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指令将上一个解决方案中的定义添加到出错文件的顶部。
  • 将前面解决方案中的定义添加到“Command Arguments”字段中,但前缀为/D-D

但这些都不能解决我的问题。
Visual Studio坚持显示此错误的原因可能是什么?

3z6pesqy

3z6pesqy1#

define NO_WARN_MBCS_MFC_DEPRECATION

lsmd5eda

lsmd5eda2#

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

#define _SECURE_SCL_DEPRECATE 0
#include <algorithm>
2g32fytz

2g32fytz3#

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

xam8gpfp

xam8gpfp4#

在您的stdafx.h中:

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

为我工作VS2015更新3

相关问题