在Visual Studio 2005 C++编译器上,当我的代码使用fopen和此类调用时,我收到以下警告.
1>foo.cpp(5) : warning C4996: 'fopen' was declared deprecated 1> c:\program files\microsoft visual studio 8\vc\include\stdio.h(234) : see declaration of 'fopen' 1> Message: 'This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.'
我该如何防止这种情况?
看起来微软已经弃用了大量使用缓冲区来提高代码安全性的调用.但是,他们提供的解决方案并不便携.无论如何,如果您对使用其安全版本的调用(如fopen_s)不感兴趣,则需要在包含的头文件之前放置_CRT_SECURE_NO_DEPRECATE的定义.例如:
#define _CRT_SECURE_NO_DEPRECATE #include
预处理程序指令也可以添加到项目设置中,以在项目下的所有文件上实现它.为此,将_CRT_SECURE_NO_DEPRECATE添加到项目属性 - >配置属性 - > C/C++ - >预处理器 - >预处理器定义.
那么你可以添加一个:
#pragma warning (disable : 4996)
在你使用fopen之前,你是否考虑过使用fopen_s作为警告?它返回一个错误代码,允许您检查函数调用的结果.
仅仅禁用已弃用的功能警告的问题是,Microsoft可能会在更高版本的CRT中删除相关功能,从而破坏您的代码(如下面的注释中所述,这不会发生在fopen的这个实例中,因为它是C&C++ ISO标准).
这只是微软的厚颜无耻."弃用"意味着标准委员会规定的标准语言/标准库的未来版本中可能未提供的语言特征.它没有,或者不应该意味着"我们,单方面地,不认为你应该使用它",无论这个建议有多么有根据.
如果您的代码适用于其他操作系统(如Mac OS X,Linux),则可以使用以下命令:
#ifdef _WIN32 #define _CRT_SECURE_NO_DEPRECATE #endif