4565|8

67

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

C51程序 [复制链接]

#include
#include
main()
{ int i=5,j=5,p,q;
  p=(i++)+(i++)+(i++);
    q=(++j)+(++j)+(++j);
   SCON=0x50;
  TMOD|=0x20;
  TH1=0xf3;
  TR1=1;
  TI=1;
  printf("p=%d\nq=%d",p,q);
  while(1){};
}
我用keil c51写了这个程序  为什么q=21 但在win-tc上是24这是和编译器有关吧?

谢谢

非常感谢

最新回复

和编译器有关,需要具体分析。不过实际项目中应该不会碰到这样写的。至少我的项目中如果谁敢这么写,而且不肯改的,就别想混了。  详情 回复 发表于 2008-7-15 20:46
点赞 关注

回复
举报

78

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
从标准C的运算逻辑推算,应该是24。
++逻辑比+逻辑高,而且还加了()。所以先算++,相当于进行了3次j=j+1, 结果j=8,然后才是三个数相加,结果24。

C51算成21,看来是跟编译器的实现有关。
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
楼主的这种写法是不好的风格.
C语言本身没有对这种情况作规定,PS,请读标准原文,不要道听图说.
我倒是觉得q = 6 + 7 + 8,显得更正常一点.
编译器可以有多种方式处理表达式.
如果编译器,对J逐个计算,入栈,分析完表达式后,出栈,做加法,那就是6+7+8
如果编译器,对J逐个计算,分析完表达式后,把一个J入栈,做加法,牛就是8+8+8
和实现有关,不要这样用++
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

4
 
其实这个除了跟不同的系统,不同的编译器有关,可能和优化等级可能还有关。
因为是在一条语句里面对j进行操作,而j没有volatile进行限制,那么编译器可能会将其优化成一次性操作,以节省size和time。结果就是j+3了。
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

5
 
p=(i++)+(i++)+(i++);
    q=(++j)+(++j)+(++j);

呵呵,最好请不要使用这样的指针运算

西安杨工单片机博客

http://c8051fmcu.blog.sohu.com
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

6
 
按照楼主的写法,应该是21才对
不过出现了24,我也不太明白,可能像上面两位说的那样是编译器的问题吧
楼主换一下编译环境,或者可能找到点东西
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

7
 
VS2005测试是24,Win-TC是24,那么TC也是24了。
Linux下谁帮忙测试一下?
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

8
 
不会吧 全是24  看来和楼主本来的想法是不符合的   看来大部分的编译器应该是把J+3次后才再相加的

 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

9
 
和编译器有关,需要具体分析。不过实际项目中应该不会碰到这样写的。至少我的项目中如果谁敢这么写,而且不肯改的,就别想混了。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
有奖直播 | AI之眼——安森美图像传感器 报名中
直播时间:2025年4月25日(周五)上午10:00-11:30
直播主题:AI之眼——安森美图像传感器
报名观看直播、直播间提问、填写问卷均有机会获得精美礼品!

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 10

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表