KEIL编译出错?关于y=y++;

2020-02-04 09:28发布

850:           selkey1f=selkey1f++;
   851:     
C:0x03D3    AF12     MOV      R7,selkey1f(0x12)
C:0x03D5    0512     INC      selkey1f(0x12)
C:0x03D7    8F12     MOV      selkey1f(0x12),R7

在自己的机子上编译的,结果selkey1f不变化;用的kel4,而在同事的机子上keil2及keil4均编译为 INC selkey1f(0x12)。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
30条回答
snoopyzz
2020-02-06 11:56
回复【14楼】millwood0  
"y=y++;"
think of it as the following:
y=y;
y++;
hope it helps.

-----------------------------------------------------------------------
这样理解是错的,等号右边运算是优先于左边的,但y++是先取值,再++

利用中间寄存器赋值的编译器会这样处理,
reg=y;
y++;
y=reg;

最后结果仍是之前的y, ++只是徒劳

但是优化等级高了,结果就可能会不一样了

一周热门 更多>