禁用生成的警告的最佳方法是什么_CRT_SECURE_NO_DEPRECATE
,这样可以轻松恢复它们并且可以跨Visual Studio版本工作?
如果您不想污染源代码(在所有此警告仅出现在Microsoft编译器之后),_CRT_SECURE_NO_WARNINGS
请通过"项目" - >"属性" - >"配置属性" - >"C/C++" 将符号添加到项目设置中" - >"预处理器" - >"预处理器定义".
您也可以在包含生成此警告的头文件之前定义它.你应该添加这样的东西
#ifdef _MSC_VER #define _CRT_SECURE_NO_WARNINGS #endif
只是一个小小的评论,请确保您了解此警告代表什么,也许,如果您不打算使用其他编译器而不是MSVC,请考虑使用更安全的函数版本,即strcpy_s而不是strcpy.
您可以使用在页面出现的位置临时禁用警告
#pragma warning(push) #pragma warning(disable: warning-code) //4996 for _CRT_SECURE_NO_WARNINGS equivalent // deprecated code here #pragma warning(pop)
所以你不要禁用所有警告,这有时可能是有害的.
我在一个多平台项目上工作,所以我不能使用_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,安全模板重载可能是一个很好的解决方案.
您还可以使用安全模板重载,它们将帮助您在任何可以轻松推断缓冲区大小(静态数组)的地方用安全模块替换不安全的调用.
只需添加以下内容:
#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
然后使用_s函数手动修复剩余的警告.
结合@ [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