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)。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
29条回答
automaticdai
1楼-- · 2020-02-07 01:44
这样的语句确实歧义性较大。
应该尽量少使用。
avrstm32
2楼-- · 2020-02-07 06:20
应该是加了1的,楼主跳开一条语句再检查selkey1f的值,是否有变化。i++; 是先使用后加,编译器保证在本语句执行完毕!!!!!!!,下一条语句执行前加1的。
any_014
3楼-- · 2020-02-07 07:20
 精彩回答 2  元偷偷看……
avrstm32
4楼-- · 2020-02-07 10:49
回复【21楼】any_014
-----------------------------------------------------------------------

从汇编上看,确实没有加1,你把selkey1f声明成volatile试试,应该就可以了。
zajia
5楼-- · 2020-02-07 13:47
我经常搞不懂, 所以这种情况下 加()
any_014
6楼-- · 2020-02-07 16:42
TO 17L,22L

(原文件名:未命名.jpg)
是这样定义吗?
结果仍是:

(原文件名:QQ截图20120306123146.jpg)

一周热门 更多>