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

系统 1868 0
这个错误意思是说,某个函数已经被标记为过时了,最好不要用,在将来的版本中,该函数可能就没有了,不存在了。

       对于编译器警告,当然可以用 #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'

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

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


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论