当前位置:  开发笔记 > 编程语言 > 正文

禁用通过_CRT_SECURE_NO_DEPRECATE生成的警告

如何解决《禁用通过_CRT_SECURE_NO_DEPRECATE生成的警告》经验,为你挑选了5个好方法。

禁用生成的警告的最佳方法是什么_CRT_SECURE_NO_DEPRECATE,这样可以轻松恢复它们并且可以跨Visual Studio版本工作?



1> Serge..:

如果您不想污染源代码(在所有此警告仅出现在Microsoft编译器之后),_CRT_SECURE_NO_WARNINGS请通过"项目" - >"属性" - >"配置属性" - >"C/C++" 将符号添加到项目设置中" - >"预处理器" - >"预处理器定义".

您也可以在包含生成此警告的头文件之前定义它.你应该添加这样的东西

#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif

只是一个小小的评论,请确保您了解此警告代表什么,也许,如果您不打算使用其他编译器而不是MSVC,请考虑使用更安全的函数版本,即strcpy_s而不是strcpy.


@PaulWhitehurst:不,他们只是在可选扩展中.

2> macbirdie..:

您可以使用在页面出现的位置临时禁用警告

#pragma warning(push)
#pragma warning(disable: warning-code) //4996 for _CRT_SECURE_NO_WARNINGS equivalent
// deprecated code here
#pragma warning(pop)

所以你不要禁用所有警告,这有时可能是有害的.


正是我需要的

3> 小智..:

我在一个多平台项目上工作,所以我不能使用_s函数,我不想用Visual Studio特定代码污染我的代码.
我的解决方案是禁用visual studio项目上的警告4996.转到项目 - >属性 - >配置属性 - > C/C++ - >高级 - >禁用特定警告添加值4996.
如果您还使用mfc和/或atl库(不是我的情况)定义之前包含mfc _AFX_SECURE_NO_DEPRECATE和之前包括atl _ATL_SECURE_NO_DEPRECATE.
我在visual studio 2003和2005中使用这个解决方案.

ps如果你只使用visual studio,安全模板重载可能是一个很好的解决方案.


`*_s`函数不是Microsoft特有的.它们被称为Bounds Checking接口,它们是C/C++标准的一部分.见[ISO/IEC TR 24772](http://www.iso.org/iso/catalogue_detail.htm?csnumber=41542).Glibc人决定不实施它们.

4> Drealmer..:

您还可以使用安全模板重载,它们将帮助您在任何可以轻松推断缓冲区大小(静态数组)的地方用安全模块替换不安全的调用.

只需添加以下内容:

#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1 

然后使用_s函数手动修复剩余的警告.



5> PicoCreator..:

结合@ [macbirdie]和@ [Adrian Borchardt]回答.这证明在生产环境中非常有用(不会弄乱以前存在的警告,特别是在跨平台编译期间)

#if (_MSC_VER >= 1400)         // Check MSC version
#pragma warning(push)
#pragma warning(disable: 4996) // Disable deprecation
#endif 
//...                          // ...
strcat(base, cat);             // Sample depreciated code
//...                          // ...
#if (_MSC_VER >= 1400)         // Check MSC version
#pragma warning(pop)           // Renable previous depreciations
#endif

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有