游戏开发论坛

 找回密码
 立即注册
搜索
查看: 12477|回复: 8

关于VS2005的编译警告“被声明为否决的”的问题?

[复制链接]

54

主题

2916

帖子

3765

积分

论坛元老

Rank: 8Rank: 8

积分
3765
QQ
发表于 2006-10-8 10:55:00 | 显示全部楼层 |阅读模式
现在原本好端端的C++代码在VS2005下编译出来一堆的警告如下:
  1. .h(47) : warning C4996: “strcpy”被声明为否决的
  2.         microsoft visual studio 8\vc\include\string.h(73) : 参见“strcpy”的声明
  3.         消息:“This function or variable may be unsafe. Consider using strcpy_s instead.
  4. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.”
复制代码


好么!要是替换成他的那个加“_s”的函数就甭打算在其他编译器上便宜了,我不改会有什么危害吗?

27

主题

179

帖子

259

积分

中级会员

Rank: 3Rank: 3

积分
259
发表于 2006-10-8 11:59:00 | 显示全部楼层

Re:关于VS2005的编译警告“被声明为否决的”的问题?

strcpy_s 有内存溢出检测。可以防止一部分程序bug, 抵制buffer overflow attack. 但是应该速度上有牺牲。所以在你确信安全的情况下,用不用都可以。

54

主题

2916

帖子

3765

积分

论坛元老

Rank: 8Rank: 8

积分
3765
QQ
 楼主| 发表于 2006-10-8 13:20:00 | 显示全部楼层

Re:关于VS2005的编译警告“被声明为否决的”的问题?

哦!谢谢楼上。
很多C函数都在VS2005里要求加上“_s“,原来只是加了一些检测而已。

那我就无视了,看来我可以把这警告disable掉了。

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2006-10-8 14:29:00 | 显示全部楼层

Re:关于VS2005的编译警告“被声明为否决的”的问题?

你可以在包含stdlib.h的前面加上宏_CRT_SECURE_NO_DEPRECATE,就不会提示警告了。这是MS新的C库提供的带有检查的函数。还有2个宏也与这个有关,你可以参看MSDN。

54

主题

2916

帖子

3765

积分

论坛元老

Rank: 8Rank: 8

积分
3765
QQ
 楼主| 发表于 2006-10-8 15:39:00 | 显示全部楼层

Re:关于VS2005的编译警告“被声明为否决的”的问题?

谢谢楼上,我没有MSDN。
现在还剩下如下这个,该用什么宏来屏蔽掉它呢?

  1. warning C4996: “chmod”被声明为否决的
  2.         microsoft visual studio 8\vc\include\io.h(316) : 参见“chmod”的声明
  3.         消息:“The POSIX name for this item is deprecated. Instead,
  4. use the ISO C++ conformant name: _chmod.
  5. See online help for details.”
复制代码

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2006-10-8 17:12:00 | 显示全部楼层

Re:关于VS2005的编译警告“被声明为否决的”的问题?

The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _chmod. See online help for details
这个函数是posix的名称,在iso中需要使用_chmod替代chmod。

下面的英文提示说的很清楚。Win下开发MSDN是一定要装的,没有的话可以访问MSDN Online。

54

主题

2916

帖子

3765

积分

论坛元老

Rank: 8Rank: 8

积分
3765
QQ
 楼主| 发表于 2006-10-8 18:18:00 | 显示全部楼层

Re:关于VS2005的编译警告“被声明为否决的”的问题?

我就是不想替代,但又不想看到警告。
那么做代码的可移植性就差了,我还要尽量保证代码能适应各种C++编译器,如:VC6、Turbo C++等等。

0

主题

202

帖子

202

积分

中级会员

Rank: 3Rank: 3

积分
202
发表于 2006-10-9 23:49:00 | 显示全部楼层

Re:关于VS2005的编译警告“被声明为否决的”的问题?

_CRT_SECURE_NO_DEPRECATE

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2006-10-10 16:14:00 | 显示全部楼层

Re:关于VS2005的编译警告“被声明为否决的”的问题?

这个替代是ISO C++,你也看到了,是标准。未来的编译器可不能保证兼容老的Posix,但是一定能保证兼容__chmod.你自己权衡一下吧。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 14:04

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表