warning C4995: “....”: 名称被标记为 #pragma deprecated

warning C4995: “....”: 名称被标记为 #pragma deprecated

Posted on  2011-07-13 15:04  皓月云天 阅读( 2644) 评论( 0编辑  收藏
原文地址:http://www.cnblogs.com/bpbp/archive/2011/07/13/2105328.html
这个错误意思是说,某个函数已经被标记为过时了,最好不要用,在将来的版本中,该函数可能就没有了,不存在了。
对于编译器警告,当然可以用 #pragma warning(disable: xxxx ) 的语法将其禁止掉,但是关闭这个警告并不正常,因为这样一来,所有过时的函数都不会再警告了,而我们可能是需要这个警告的。
 像是对于strcpy这种超常用的函数,考虑到安全性(应对缓冲区溢出攻击),我们的确应该使用其安全版本,例如strcpy就有对应的StringCchCopy/StringCbCopy这样的函数,如果关闭了此警告,我们就可能在代码中不小心写下strcpy,而不是其对应的安全版本(当然,strcpy等函数是特例,关闭C4995警告后,仍然会有其他警告,下面有说明)。
 所以,考察上述几个函数,我们知道其函数声明所在的头文件,这些头文件中的函数应该都不会用到,所以可以用另一种方式来避免引入这些头文件:
 在你的工程的预编译头文件(一般来说,就是stdafx.h)中,在 #pragma once 一行后面加上下列三行:
 
1.#define _CSTDIO_
2.#define _CSTRING_
3.#define _CWCHAR_
这样,编译器就不会再加载 cstdio / cstring / cwchar 这几个头文件了。
注意:
      使用 #pragma warning(disable: xxxx) 这种方式关闭警告后,如果代码里面用到了 strcpy 这样的函数,编译器会报另一个警告:
 
1.1>e:\work\ncksoft\test\main.cpp(126) : warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

2.1>        d:\program\msvs2008\vc\include\string.h(74) : see declaration of 'strcpy'

 所以我们仍然可以得到想要的警告信息。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值