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

fopen弃用警告

如何解决《fopen弃用警告》经验,为你挑选了4个好方法。

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.'

我该如何防止这种情况?



1> Ashwin Nanja..:

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

#define _CRT_SECURE_NO_DEPRECATE
#include 

预处理程序指令也可以添加到项目设置中,以在项目下的所有文件上实现它.为此,将_CRT_SECURE_NO_DEPRECATE添加到项目属性 - >配置属性 - > C/C++ - >预处理器 - >预处理器定义.


你可能应该这样做:#ifdef _WIN32 #define _CRT_SECURE_NO_DEPRECATE #endif #include 因为其他平台不需要在编译期间定义.

2> John Sibly..:

那么你可以添加一个:

#pragma warning (disable : 4996)

在你使用fopen之前,你是否考虑过使用fopen_s作为警告?它返回一个错误代码,允许您检查函数调用的结果.

仅仅禁用已弃用的功能警告的问题是,Microsoft可能会在更高版本的CRT中删除相关功能,从而破坏您的代码(如下面的注释中所述,这不会发生在fopen的这个实例中,因为它是C&C++ ISO标准).


"微软可能会在更高版本的CRT中删除相关功能" - 如果他们不再希望实施C或C++标准.
对于未来的googlers:`在这种情况下,"弃用"只是意味着不建议使用函数; 它并不表示该功能计划从CRT中删除. - [msdn](http://msdn.microsoft.com/en-us/library/8ef0s5kh.aspx) ++++
有些人也会针对非MS平台.并且有很多这些_s函数,并没有真正明显的安全性增益.
在VS2013中,我需要使用`#pragma warning(disable:4996)`因为建议的`_CRT_SECURE_NO_WARNINGS`和`_CRT_SECURE_NO_DEPRECATE`都不起作用.`#define`s似乎在其他环境中起作用,因此提出这似乎是不一致的实现.

3> tragomaskhal..:

这只是微软的厚颜无耻."弃用"意味着标准委员会规定的标准语言/标准库的未来版本中可能未提供的语言特征.它没有,或者不应该意味着"我们,单方面地,不认为你应该使用它",无论这个建议有多么有根据.


英语单词"deprecate"的含义恰恰是第二件事:"我们认为你不应该使用它".但是用计算机的说法,它最近的意义却要弱得多,"使用它可能不明智,因为我们考虑去除它,我们提供了一些我们认为更好的东西".

4> Magnetron..:

如果您的代码适用于其他操作系统(如Mac OS X,Linux),则可以使用以下命令:

#ifdef _WIN32
#define _CRT_SECURE_NO_DEPRECATE
#endif

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