vs解决无符号类型,安全开发生命周期(SDL)检查

前面在学习使用google的protobuf时在VS2012中一直无法编译编译通过,经过查找一些资料原来发现,并不是protobuf的问题,而是自己在使用VS2012时,没有完全了解VS2012的强大功能,和跟以前VS2010的差别,导致无法编译通过。


现在就来说说为什么没有编译通过,在VS2012创建项目时,会有一个勾选项,叫做“安全开发生命周期(SDL)检查”,这个东西是微软在VS2012新推出的东西,为了是能更好的监管开发者的代码安全,如果勾选上这一项,那么他将严格按照SDL的规则编译代码,会有一些以前常用的函数无法通过编译,比如在VS2010中的scanf是warning那么在VS2012中就是error了。


查看MSDN中对SDL的描述,SDL检查会视以下告警为错误:

/sdl 启用警告

等效的命令行开关

描述

C4146

/we4146

一元负运算符应用于无符号类型,从而导致无符号结果。

C4308

/we4308

一个负整型常数转换为无符号类型,从而导致一个可能无意义结果。

C4532

/we4532

__finally /finally中的关键词,使用continue, break 或 goto在异常终止块未定义行为。

C4533

/we4533

初始化变量的代码不会执行。

C4700

/we4700

使用未初始化的局部变量。

C4703

/we4703

对一个潜在的未初始化的局部指针变量的使用。

C4789

/we4789

当使用时,请缓冲区溢出特定 C 运行时 (CRT) 函数。

C4995

/we4995

使用函数的标deprecated

C4996

/we4996

使用函数的标记作为deprecated

也就是在编译的时候,当SDL检查启用时,编译器会严格检测缓冲区的溢出,并且会在delete某个指针时,自动为这个指针定义一个非有效的值,防止在delete以后仍用到这个指针时出错。还有就是会在你定义一个对象时,自动为这个对象赋值零。


从这些功能来看,有些功能还是不错的,不但方便了程序员使用也增强了程序的健壮性,但是对老版本程序的兼容就会出现问题,以前程序中编译通过的内容也许在VS2012中就没有办法通过,还是大家根据自己的习惯自行考虑是否使用这个东西吧。


另:还有一个选择打开和关闭SDL检查的位置就是:项目属性->配置属性->C/C++->SDL检查,选测是或者否


转自:http://blog.csdn.net/angle635/article/details/22035427

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
安全开发生命周期 (SDL) 模板是一种软件开发过程框架,旨在帮助开发团队在软件开发的每个阶段都考虑到安全性。 SDL模板包括以下几个关键阶段: 1. 需求分析阶段:在这个阶段,开发团队需要与客户和利益相关者明确需求。在模板中,需要考虑到安全需求和安全目标,并确保将安全性纳入需求文档中。 2. 设计阶段:在这个阶段,开发团队需要创建软件的整体架构和设计方案。在SDL模板中,应考虑到安全设计原则和最佳实践,例如隔离数据和功能、访问控制和认证等。 3. 编码和测试阶段:在这个阶段,开发团队将根据设计文档进行编码,并对代码进行测试和调试。在SDL模板中,应强调使用安全编码实践,例如输入验证、输出编码、错误处理和异常处理等。 4. 部署和维护阶段:在这个阶段,软件将被部署到生产环境中,并且需要定期维护和更新。SDL模板强调在部署和维护过程中要考虑到安全性,例如安全配置和漏洞修复等。 5. 培训和意识阶段:在整个开发周期中,开发团队需要接受有关安全性的培训和意识。SDL模板强调通过安全培训和意识计划来提高开发团队的安全意识。 通过使用SDL模板,开发团队能够在软件开发的每个阶段都考虑到安全性,并采取相应的安全措施和实践,从而降低软件安全风险,并确保软件的安全性和可信度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值