| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 533 人关注过本帖
标题:求助 为什么输出的是150
只看楼主 加入收藏
lokemao
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-9-28
结帖率:0
收藏
已结贴  问题点数:20 回复次数:4 
求助 为什么输出的是150
#include<stdio.h>
#define edcu(x) x*x*x
int main()
{
      int x = 3;
      printf("%d\n",edcu(++x));
        return 0;
}
搜索更多相关主题的帖子: include 150 return 
2012-09-28 20:57
lokemao
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-9-28
收藏
得分:0 
回复 楼主 lokemao
是不是问题太简单了。 但我纠结很久了 我用到是ubuntu
2012-09-28 21:13
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:10 
这个需要看编译器的具体实现


x = 3
y = ++x * ++x * ++x;

150 猜测的实现
        (150)
        / \
    (25)  ++x
   /   \
++x     ++x
2012-09-28 22:32
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
回复 2楼 lokemao
表达式中 不应该出现这样的语句

考试另当别论
2012-09-28 22:34
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:10 
未定义行为。一种合理的猜测就是3楼的那样。

宏展开之后是:++x * ++x * ++x
按照结合规则,语义上等价于 (++x * ++x) * ++x

但这里由于违背了一个变量在相临顺序点中最多更改一次值的要求,因此是未定义行为。副作用发生的确切时机也不能断言。
4*4*4, 4*5*4, 6*5*4 之类的这些结果都算合情合理。就算编译器报语法错误也可以接受。
2012-09-29 07:46
快速回复:求助 为什么输出的是150
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015929 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved