游戏开发论坛

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

VC 6.0 一个奇怪的问题

[复制链接]

21

主题

125

帖子

135

积分

注册会员

Rank: 2

积分
135
QQ
发表于 2008-7-4 00:50:00 | 显示全部楼层 |阅读模式

int main()
{
  bool a = 0.1f;
  return 0;
}

/*
// 在 VC6.0   监视窗口查看 *(char*)&a 值为 0x64 (注意:这个值不稳定)
//            ( 反汇编:mov byte ptr [ebp-4],64h)
// 在 VC 2005 监视窗口查看 *(char*)&a 值为 0x01
// 我认识值为 0x01 才是正确的,但是在 vc6 里面的结果为何那么奇怪。
// 不会是我没有打补丁吧?
// 如果在 bool a = 0.1f; 之前添加其它变量声明,数值 a 结果又会变化。不稳定。
*/

21

主题

125

帖子

135

积分

注册会员

Rank: 2

积分
135
QQ
 楼主| 发表于 2008-7-4 17:53:00 | 显示全部楼层

Re:VC 6.0 一个奇怪的问题

各位大哥,今天我上这论坛好十多次了,还没有见回贴,难道没有人知道这问题的原因???

自己顶一下先,哈哈.

21

主题

100

帖子

100

积分

注册会员

Rank: 2

积分
100
QQ
发表于 2008-7-5 09:53:00 | 显示全部楼层

Re:VC 6.0 一个奇怪的问题

起初的编译器认为只需要保证"a => 初始化为真"动作语义上的正确就可以了吧,对初始化值不关心。后来可能考虑赋值成0x01更有意义吧。猜的。。=.=

0

主题

37

帖子

41

积分

注册会员

Rank: 2

积分
41
发表于 2008-7-5 18:01:00 | 显示全部楼层

Re:VC 6.0 一个奇怪的问题

估计是VC6.0和VS2005在编译代码的时候略有差别

0

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2008-7-5 20:41:00 | 显示全部楼层

Re: VC 6.0 一个奇怪的问题

可能编译器的差别 [em13]

21

主题

125

帖子

135

积分

注册会员

Rank: 2

积分
135
QQ
 楼主| 发表于 2008-7-5 21:09:00 | 显示全部楼层

Re:VC 6.0 一个奇怪的问题

我个人的想法,有三个可能性:

一是:VC6 的 const float 转换到 bool 有个规律,但非常特殊,而在以后的版本中去了这功能,也许是微软的天才觉得没有太大作用吧。(这点可能性比较小)

二是:VC6 的编译器有点问题,在以后的版本中得到了修正。(可能性对大)

三是:我的贴有问题,这问题根本就是错误的,不存在这情况,是我的电脑编译器或系统问题。哈哈。这点也不可忽略。(可能性和第一个差不多吧)

3

主题

53

帖子

104

积分

注册会员

Rank: 2

积分
104
发表于 2008-7-7 10:26:00 | 显示全部楼层

Re:VC 6.0 一个奇怪的问题

VC6中的C++版本比较低,该版本并不支持真正的bool型,是通过int来模拟的;VC2003以后的c++版本就有真正的bool型

1

主题

15

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2008-7-7 15:52:00 | 显示全部楼层

Re:VC 6.0 一个奇怪的问题

vc6也没错吧。编译器保证了bool型变量的正确性,也就是只能有true,false结果。如果你觉得vc6下面bool不好用就用BOOL(==int)好了。

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
发表于 2008-7-7 19:35:00 | 显示全部楼层

Re:VC 6.0 一个奇怪的问题

我是:
//instTypes.h
typedef Bool bool
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-22 01:42

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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