在Visual Studio2005FOpen编译器上,当我的代码使用 C++ 和类似的调用时,我会收到以下警告。
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.'
我如何防止这种情况发生?
发布于 2008-08-18 09:39:17
看起来微软已经弃用了很多使用缓冲区来提高代码安全性的调用。然而,他们提供的解决方案是不可移植的。无论如何,如果您对使用其调用的安全版本(如fopen_s)不感兴趣,则需要在所包含的头文件之前放置_CRT_SECURE_NO_DEPRECATE的定义。例如:
#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
预处理器指令还可以添加到项目设置中,以对项目下的所有文件生效。为此,请将_CRT_SECURE_NO_DEPRECATE添加到项目属性->配置属性-> C/C++ ->预处理器->预处理器定义。
发布于 2008-08-18 12:18:14
你可以添加一个:
#pragma warning (disable : 4996)
在您使用fopen之前,但是您是否考虑过按照警告建议的那样使用fopen_s?它返回一个错误代码,允许您检查函数调用的结果。
仅仅禁用弃用函数警告的问题是,微软可能会在更高版本的CRT中删除有问题的函数,从而破坏您的代码(如下面的注释所述,这种情况在使用fopen时不会发生,因为它是C& C++ ISO标准的一部分)。
发布于 2008-11-12 17:34:50
这只是微软的厚颜无耻。“弃用”意味着标准委员会颁布的标准语言/标准库的未来版本中可能不会提供的语言功能。这并不意味着,或者不应该意味着,“我们,单方面,不认为你应该使用它”,无论这个建议是多么有根据。
https://stackoverflow.com/questions/14386
复制相似问题