在c51程序中遇到这样一个问题,请高手指教

[复制链接]
3207|7
 楼主| siuhiong 发表于 2011-7-4 22:22 | 显示全部楼层 |阅读模式
我遇到这样一个问题,请高手指教
switch(IrStep)
  {     
   case 0x00:
              if((TH0>=0x2f)&&(TH0<=0x31))
               {
                IrStep=1;
                IrExt();
               }
              else
                IrEnd();
               break;
   case 0x05:
              if((TH0>=0x28)&&(TH0<=0x2a))
               {
                IrFull=1;
                IrEnd();
                IrStep=5;
               }
              else
                IrEnd();
               break;   
  }
当if((TH0>=0x2f)&&(TH0<=0x31))为假时,为什么程序跳到case 0x05里面的else后面,而不是跳到case 0x00里面的else后面?
心静自然凉 发表于 2011-7-5 07:47 | 显示全部楼层
1,你能确定IrStep == ,0x00吗?
2,前后两个else后面的程序都一样,你是如何知道程序跳到“case 0x00里面的else”的?
3,代码要规范,即使else后面只有一句,也要把括号加上。
123jj 发表于 2011-7-5 08:08 | 显示全部楼层
很正常,编译时将程序优化了,case 0x00里面的else后面 和 case 0x05里面的else后面 程序内容相同,合二为一了。
ningling_21 发表于 2011-7-5 08:19 | 显示全部楼层
楼上正解...
 楼主| siuhiong 发表于 2011-7-5 11:41 | 显示全部楼层
1,你能确定IrStep == ,0x00吗?
2,前后两个else后面的程序都一样,你是如何知道程序跳到“case 0x00里面的else”的?
3,代码要规范,即使else后面只有一句,也要把括号加上。 ...
心静自然凉 发表于 2011-7-5 07:47

1.我可以确定IrStep==0x00.
2.设断点就可以看出程序怎么走。
sjssjssjs 发表于 2011-7-5 12:09 | 显示全部楼层
应该是编译器优化了,重选一下优化级别
 楼主| siuhiong 发表于 2011-7-6 11:45 | 显示全部楼层
很正常,编译时将程序优化了,case 0x00里面的else后面 和 case 0x05里面的else后面 程序内容相同,合二为一了。
123jj 发表于 2011-7-5 08:08

多谢指教
taoangel 发表于 2011-7-13 21:18 | 显示全部楼层
受教了 。。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

39

帖子

2

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