首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >fopen已弃用警告

fopen已弃用警告
EN

Stack Overflow用户
提问于 2008-08-18 09:38:59
回答 10查看 182.7K关注 0票数 70

在Visual Studio2005FOpen编译器上,当我的代码使用 C++ 和类似的调用时,我会收到以下警告。

代码语言:javascript
运行
复制
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.'

我如何防止这种情况发生?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2008-08-18 09:39:17

看起来微软已经弃用了很多使用缓冲区来提高代码安全性的调用。然而,他们提供的解决方案是不可移植的。无论如何,如果您对使用其调用的安全版本(如fopen_s)不感兴趣,则需要在所包含的头文件之前放置_CRT_SECURE_NO_DEPRECATE的定义。例如:

代码语言:javascript
运行
复制
#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>

预处理器指令还可以添加到项目设置中,以对项目下的所有文件生效。为此,请将_CRT_SECURE_NO_DEPRECATE添加到项目属性->配置属性-> C/C++ ->预处理器->预处理器定义。

票数 134
EN

Stack Overflow用户

发布于 2008-08-18 12:18:14

你可以添加一个:

代码语言:javascript
运行
复制
#pragma warning (disable : 4996)

在您使用fopen之前,但是您是否考虑过按照警告建议的那样使用fopen_s?它返回一个错误代码,允许您检查函数调用的结果。

仅仅禁用弃用函数警告的问题是,微软可能会在更高版本的CRT中删除有问题的函数,从而破坏您的代码(如下面的注释所述,这种情况在使用fopen时不会发生,因为它是C& C++ ISO标准的一部分)。

票数 31
EN

Stack Overflow用户

发布于 2008-11-12 17:34:50

这只是微软的厚颜无耻。“弃用”意味着标准委员会颁布的标准语言/标准库的未来版本中可能不会提供的语言功能。这并不意味着,或者不应该意味着,“我们,单方面,不认为你应该使用它”,无论这个建议是多么有根据。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档