KEIL C 编译问题 啊
用了KEIL很久了,一直心里不踏实,因为总遇到一些奇怪的事情,今天又发生了一个:下面<br />是C源程序和汇编后的程序,大家帮分析一下。<br /> if(m_st_SerialPort.u8UartRxActiveTimer)//如果不为零<br /> {<br /> m_st_SerialPort.u8UartRxActiveTimer--;//减一<br /> if(m_st_SerialPort.u8UartRxActiveTimer == 0);//如果为零<br /> {<br /> m_st_SerialPort.u8RecDataPorNum = 0;//执行这里<br /> }<br /> }<br />000D 7800 R MOV R0,#LOW m_st_SerialPort+01CH//判断第一个IF是否为零<br />000F E6 MOV A,@R0<br />0010 6005 JZ ?C0032//判断第一个IF是否为零,不为零跳转<br /> ; SOURCE LINE # 192<br /> ; SOURCE LINE # 193<br />0012 16 DEC @R0//减一<br /> ; SOURCE LINE # 194<br />0013 ?C0033:<br /> ; SOURCE LINE # 195<br /> ; SOURCE LINE # 196<br />0013 E4 CLR A// 这里减一之后直接把另一个数清零了,没有再判断一次,减一后是否为零<br />0014 7800 R MOV R0,#LOW m_st_SerialPort+01BH<br />0016 F6 MOV @R0,A<br /> ; SOURCE LINE # 197<br /> ; SOURCE LINE # 198<br /><br /><br />不知道这样说大家能看懂吗~~ 我先判断一个数是否为零,不为零减一在判断是否为零,第二个判断是否为零没有做,直接执行IF里的语句了<br />为什么这样,是KEIL 给优化了吧,这句有啥问题呢,把变量加了 volalital之后还是不行。<br />if语句后面多了个 ;
楼主代码出现了手误<br />if()<br />{<br />}<br />不要写为<br />if();<br />{<br />}C编程最经典的低级错误之一……
编译器能禁止这种写法就好了有的编译器可以报个warnning。
但是这样写理论上不能报错啊。万一你括号里有赋值语句呢? 谢谢大家
页:
[1]