Ash*_*ppa 66 fopen deprecated visual-c++
在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.'
Run Code Online (Sandbox Code Playgroud)
我该如何防止这种情况?
Ash*_*ppa 122
看起来微软已经弃用了大量使用缓冲区来提高代码安全性的调用.但是,他们提供的解决方案并不便携.无论如何,如果您对使用其安全版本的调用(如fopen_s)不感兴趣,则需要在包含的头文件之前放置_CRT_SECURE_NO_DEPRECATE的定义.例如:
#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
Run Code Online (Sandbox Code Playgroud)
预处理程序指令也可以添加到项目设置中,以在项目下的所有文件上实现它.为此,将_CRT_SECURE_NO_DEPRECATE添加到项目属性 - >配置属性 - > C/C++ - >预处理器 - >预处理器定义.
Joh*_*bly 26
那么你可以添加一个:
#pragma warning (disable : 4996)
Run Code Online (Sandbox Code Playgroud)
在你使用fopen之前,你是否考虑过使用fopen_s作为警告?它返回一个错误代码,允许您检查函数调用的结果.
仅仅禁用已弃用的功能警告的问题是,Microsoft可能会在更高版本的CRT中删除相关功能,从而破坏您的代码(如下面的注释中所述,这不会发生在fopen的这个实例中,因为它是C&C++ ISO标准).
tra*_*los 13
这只是微软的厚颜无耻."弃用"意味着标准委员会规定的标准语言/标准库的未来版本中可能未提供的语言特征.它没有,或者不应该意味着"我们,单方面地,不认为你应该使用它",无论这个建议有多么有根据.
如果您的代码适用于其他操作系统(如Mac OS X,Linux),则可以使用以下命令:
#ifdef _WIN32
#define _CRT_SECURE_NO_DEPRECATE
#endif
Run Code Online (Sandbox Code Playgroud)
小智 5
我使用的是 VisualStdio 2008。在这种情况下,我经常设置 Preprocessor Definitions
菜单 \ 项目 \ [项目名称] 属性... Alt+F7
如果单击此菜单或在项目窗口中按 Alt + F7,您可以看到“属性页”窗口。
然后看到窗口左侧的菜单。
配置属性\C/C++\预处理器
然后添加_CRT_SECURE_NO_WARNINGS到\Preprocessor Definitions。
| 归档时间: |
|
| 查看次数: |
155414 次 |
| 最近记录: |