谁闲着呢?看一个很奇怪的C问题(已解决)

[复制链接]
 楼主| 一朝成名 发表于 2007-10-11 09:44 | 显示全部楼层 |阅读模式
最近做个东西写了个小程序但是就出现了费解的问题.仅仅是改动下面的几句
程序就出现非常不正常的现象,看不出问题出那里了.....只有把if(a-b >1)改为if(--a != b)(后面有a的修正a++)
程序才能正常运行.....很是纳闷.....这俩句子没区别吧???


if(a > b)
  {
   if(a-b>1)    //如果把前面改做if(--a != b)后面再加个a++程序正常运行,就是为了   让a 比b大于一以上一下的程序才执行. 
     {                  
      ......
     }
   }
if(a<b)
  {                 
   if(b-a>1)           //跟上面同样道理
     {
      ......
      }
   }


KEIL可能直接把前后两个条件直接优化到一起了,这样出的错
dld2 发表于 2007-10-11 09:48 | 显示全部楼层

呵呵,最明显的不同

a改变了
duanhnhy 发表于 2007-10-11 09:50 | 显示全部楼层

RE

--a!=b  a值已经被改变
a-b>1   a值不变
ayb_ice 发表于 2007-10-11 09:54 | 显示全部楼层

没有搞明白就怪

 楼主| 一朝成名 发表于 2007-10-11 10:37 | 显示全部楼层

这个我知道的呵呵

没说明白的

在下面我加了a++的呵呵
 楼主| 一朝成名 发表于 2007-10-11 10:42 | 显示全部楼层

如果想a比b大于2再运行程序的话

我用if(a-b>2)
同样出现了跟a-b>1的同样的情况
就是程序跑的不正常

computer00 发表于 2007-10-11 10:44 | 显示全部楼层

老兄,大于和不等于可不一样啊,小于也可以不等于啊

 楼主| 一朝成名 发表于 2007-10-11 10:46 | 显示全部楼层

俺在前面有if(a>b)的呵呵

逻辑上没有问题的吧

怎么就是出错呢
zssmcu 发表于 2007-10-15 14:23 | 显示全部楼层

很可能是你前面定义的a,b不是同类型的

比如a是signed char,b是unsigned char
xianglin 发表于 2007-10-15 14:37 | 显示全部楼层

ding

看功能是否实现不就的了
yewuyi 发表于 2007-10-15 16:51 | 显示全部楼层

是不是优化出的错,关掉优化就知道了……

哈哈,看着不大象是优化的事情啊
古道122 发表于 2007-10-16 11:14 | 显示全部楼层

假设一下

设a=4.5,b=4,那么修改后能执行下去,不改就不能执行了
 楼主| 一朝成名 发表于 2007-10-16 21:20 | 显示全部楼层

想写个简单的吧还不行

误导大家了 A B都是 uchar

看出来了是优化的错误 优化8.9就出错了  但是不知道为什么呢

您需要登录后才可以回帖 登录 | 注册

本版积分规则

100

主题

3299

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部

100

主题

3299

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部