c4996 error 还是 warning (fopen,fopen_s)

xiacanni 2014-11-05 09:47:12
最近有一段代码,包含fopen函数。
在编译的时候,显示warning c4996。
warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
关于这个warning,我原来也见过,虽然不完全懂,但是知道改成fopen_s这样安全的函数就行了。

后来,我将这一段代码用于另一个工程。
在编译的时候,却显示error c4996。
error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
现在问题来了。
为什么同样使用fopen,在一个程序中是warning,在另一个中是error?
可能是出于什么原因?也可以谈谈warning和error的机制在vistual studio中是怎么样的?

vistual studio版本是2012 update4。
...全文
564 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiacanni 2014-11-08
  • 打赏
  • 举报
回复
引用 1 楼 JiangWenjie2014 的回复:
编译器设置的问题,有些编译器把警告当做错误,强制不让编译通过。_CRT_SECURE_NO_WARNINGS把这个宏定义加上就可以了。
谢谢你。确实是编译器设置的问题。 具体到我碰到的情况,是编译器开启了/sdl。 可以看这里(http://msdn.microsoft.com/zh-cn/library/jj161081.aspx)。
xiacanni 2014-11-08
  • 打赏
  • 举报
回复
引用 5 楼 ForestDB 的回复:
tread warning as error
谢谢你。我试了一下,发现两个工程的Treat Warnings As Errors都是“否”。所以不是这个原因。 但是,正好看到了下一个选项不一样 —— “sdl检查”。 把这个设置成“否”就会显示warning,把这个设置成“是”就会显示error。 更多的信息可以在这里查到(http://msdn.microsoft.com/zh-cn/library/jj161081.aspx)。上面也确实说这个选项把一些warning视作error。
xiacanni 2014-11-08
  • 打赏
  • 举报
回复
引用 3 楼 xydp1987108 的回复:
看看工程设置,VS2010是在Configuration->c/c++->General->Treat Warnings As Errors,VS2012一个也是类似的设置
谢谢你。我试了一下,发现两个工程的Treat Warnings As Errors都是“否”。所以不是这个原因。 但是,正好看到了下一个选项不一样 —— “sdl检查”。 把这个设置成“否”就会显示warning,把这个设置成“是”就会显示error。 更多的信息可以在这里查到(http://msdn.microsoft.com/zh-cn/library/jj161081.aspx)。上面也确实说这个选项把一些warning视作error。
赵4老师 2014-11-05
  • 打赏
  • 举报
回复
#pragma warning(disable:4996)
ForestDB 2014-11-05
  • 打赏
  • 举报
回复
tread warning as error
JiangWenjie2014 2014-11-05
  • 打赏
  • 举报
回复
编译器设置的问题,有些编译器把警告当做错误,强制不让编译通过。_CRT_SECURE_NO_WARNINGS把这个宏定义加上就可以了。
SiGoYi 2014-11-05
  • 打赏
  • 举报
回复
这个应该是警告级别问题,在工程中可以设置警告等级。 此外,建议楼主以后使用api,都使用带_s这种,因为这种是微软认为是完全的api,此种api比之前不带_s多了一个长度,官方解释为了避免漏洞。
xydp1987108 2014-11-05
  • 打赏
  • 举报
回复
看看工程设置,VS2010是在Configuration->c/c++->General->Treat Warnings As Errors,VS2012一个也是类似的设置

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧