有遇到过这种错误吗?VS中报错C4996

其实这就是一些警告,但是如果你用了很多第三方的开源代码,你很难保证这些开源代码中使用的函数以及编码规范都遵循了VS最新的要求,所以很可能就会报错,注意时报错不是警告,怎么办?

看官方解决方法:

在 Visual Studio 开发环境中设置此编译器选项

  1. 打开项目的“属性页” 对话框。 有关详细信息,请参阅在 Visual Studio 中设置 C++ 编译器和生成属性。

  2. 选择“配置属性”>“C/C++”>“常规”属性页 。

  3. 使用属性下拉列表控件设置“SDL 检查”属性。 选择“确定”或“应用”以保存更改。

总之,就是个坑爹的,VS自作多情地默认设置成开启了,其实应该关闭的。

再看看官方完整解释:

启用建议的安全开发生命周期 (SDL) 检查。 这些检查将安全相关警告更改为错误并设置附加安全代码生成功能。

语法

/sdl[-]

注解

/sdl 启用 /GS 提供的基线安全检查的超集并重写 /GS-。 默认情况下,/sdl 处于关闭状态。 /sdl- 禁用附加安全检查。

编译时检查

/sdl 启用以下被视为错误的警告:

/sdl 启用的警告 等效的命令行开关 说明
C4146 /we4146 将一元减号运算符应用于无符号类型,并生成了无符号的结果。
C4308 /we4308 将负整型常数转换为无符号类型,并生成了可能无意义的结果。
C4532 /we4532 在 __finally/finally 块中使用 continuebreak 或 goto 关键字已在异常终止期间取消定义了行为。
C4533 /we4533 初始化变量的代码不会执行。
C4700 /we4700 使用未初始化的局部变量。
C4703 /we4703 使用可能未初始化的局部指针变量。
C4789 /we4789 使用特定 C 运行时 (CRT) 函数时缓冲区溢出。
C4995 /we4995 使用标记有 pragma deprecated 的函数。
C4996 /we4996 使用标记有 deprecated 的函数。

运行时检查

启用 /sdl 后,编译器将生成在运行时执行这些检查的代码:

  • 启用 /GS 运行时缓冲区溢出检测的严格模式,等同于使用 #pragma strict_gs_check(push, on) 进行编译。

  • 执行有限的指针清理。 在不涉及取消引用的表达式中以及没有用户定义的析构函数的类型中,在调用 delete 后,指针引用将设置为无效的地址。 此清理有助于防止重复使用已过时的指针引用。

  • 初始化类成员指针。 在对象实例化时自动将指针类型的类成员初始化为 nullptr(在构造函数运行前)。 它有助于防止使用构造函数未显式初始化的未初始化指针。 在以下情况下,将调用编译器生成的成员指针初始化:

    • 对象不是使用自定义(用户定义)的 operator new 分配的

    • 对象不是作为数组(例如 new A[x])的一部分分配的

    • 类不是托管或导入的

    • 类具有用户定义的默认构造函数。

    若要由编译器生成的类初始化函数初始化,成员必须是指针,而不是属性或常量。

有关详细信息,请参阅警告、/sdl 和改进未初始化的变量检测。

在 Visual Studio 开发环境中设置此编译器选项

  1. 打开项目的“属性页” 对话框。 有关详细信息,请参阅在 Visual Studio 中设置 C++ 编译器和生成属性。

  2. 选择“配置属性”>“C/C++”>“常规”属性页 。

  3. 使用属性下拉列表控件设置“SDL 检查”属性。 选择“确定”或“应用”以保存更改。

另请参阅

MSVC 编译器选项
MSVC 编译器命令行语法

VS中报错C4996 怎么办?相关推荐

  1. VS中报错C4996 scanf错误错误介绍解决方案

    在VS中,对于初学者来说存在一些各种意想不到的错误,但比较友好的是新版本中在报错的同时会指出错误地方.以下说说VS2019中 c4996 sacnf报错的解决方法. 操作环境:win10+VS2019 ...

  2. pycharm中报错:Error: failed to send plot to http://127.0.0.1:63342

    pycharm中报错:Error: failed to send plot to http://127.0.0.1:63342 import matplotlib.pyplot as plt impo ...

  3. Windows中报错:Fatal error in launcher: Unable to create process using ‘“‘ 的解决方案

    Windows中报错:Fatal error in launcher: Unable to create process using '"' 的解决方案 参考文章: (1)Windows中报 ...

  4. js中报错“Maximum call stack size exceeded“解决方法

    js中报错"Maximum call stack size exceeded"解决方法 参考文章: (1)js中报错"Maximum call stack size ex ...

  5. Centos下gcc的安装、gcc的更新、gcc安装过程中报错:make[1]: *** [stage1-bubble] 错误 2

    Centos下gcc的安装.gcc的更新.gcc安装过程中报错:make[1]: *** [stage1-bubble] 错误 2 文章目录: 1 下载gcc的源码 1.1 源码下载地址: 1.2 下 ...

  6. MySQL注入中报错的利用

    MySQL注入中报错的利用 在很多的情况 下我们不能直接方便的进行注入,于是有了BENCHMARK延迟注射,如果能得到MySQL的错误信息的话,现在又有了更方便的方法. 网上流传了两三种方法,以前我在 ...

  7. ThinkPHP5.0中报错could not find driver的解决方式

    这个报错是我的tp5项目转移到另外的服务器中发生的错误, 其中报错信息中还包含这pdo等字眼 解决方法:在php.ini中开启php_pdp_mysql.dll 转载于:https://www.cnb ...

  8. hibernate中报错could not initialize proxy - no Session的解决方法

    hibernate中报错:could not initialize proxy - no Session,怎么解决? 解决方法: 在该hbm文件中的 many-to-one 的最后加上:lazy=&q ...

  9. web前端知识点太多_前端知识点总结——框架中报错集锦(含解决方法)

    前端知识点总结--框架中报错集锦(含解决方法) 1.vue 1.指定template直接返回多个标签 Component template should contain exactly one roo ...

最新文章

  1. 【决策】Waymo无人出租车年底发射,现已进入定价环节 | 公交部门竟成友军?...
  2. 在ie7中overflow: hidden失效问题哦及解决方案
  3. php中curl的详解
  4. Delphi 字符串转十六进制
  5. easyui数据表格显示复选框_【Excel技巧】使用控件一键切换实现单位元和万元随意显示...
  6. SpringBoot2.0 基础案例(11):配置AOP切面编程,解决日志记录业务
  7. hid在linux上的轮训时间,LINUX下USB1.1设备学习小记(6)_hid与input子系统(1)
  8. 组态王授权产品id和授权锁id_软件加密授权工具推荐
  9. 序列中连续值之间的差值列表
  10. “极度郁闷,要求慰安”
  11. b5对战一直检索服务器信息,【B5平台】求解封,服务器问题啊
  12. 云计算解决方案--百度文库
  13. 电子类经典书籍汇总(转 )
  14. instead of 的用法
  15. 2016年腾讯校招笔试题
  16. 笔记本电脑无法连接网络并在网络状态中显示ipv4和ipv6无网络访问权限
  17. png转ico+windows图标+GIMP
  18. Pyside2 Qlabel如何快速添加click鼠标单击事件(新手上路,勿喷!)
  19. abcd选项后的数据分析_引入新的数据abcs
  20. 鸿蒙发布会重播,华为鸿蒙发布会2021现场直播在线观看/回放入口

热门文章

  1. Linux系统之Xinetd服务
  2. Flink:集群异常问题记录
  3. 几个步骤就可以轻松的修改视频尺寸
  4. uint64 和字符串相互转换
  5. 定义结构体时的初始化默认值
  6. 二叉树遍历之前序遍历,中序遍历,后序遍历
  7. python的seaborn用于可视化分析_Python数据分析-可视化“大佬”之Seaborn
  8. Unity --- Vector3的使用,欧拉角与四元数
  9. 模棱两可的生物学概念问题辨析1
  10. 红米2a android5,红米手机/小米手机2S/2A三机对比图赏