免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1006 | 回复: 4
打印 上一主题 下一主题

求助:一个看似简单的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-03-29 12:24 |只看该作者 |倒序浏览
#include <iostream>;


#define num 5
#define cube(x) ((x)*(x)*(x))


int main()
{
        int x = 6, ans = 0;
        ans = cube(++x);
        std::cout<<ans<<std::endl;
        return 0;
}

这个程式在vc6中运行一切正常,结果打印为504,而在quincy2002中编译运行的结果却是576,而在quincy中追踪变量ans的值在初试化时就显示为26,不知道为什么?
附图:

[/img]

论坛徽章:
0
2 [报告]
发表于 2005-03-29 12:57 |只看该作者

求助:一个看似简单的问题

不同编译器对(++x)*(++x)*(++x)的表示的解释不同,
VC估计7*8*9
而后面的可能是9*(8*
具体你可以disassemble

论坛徽章:
0
3 [报告]
发表于 2005-03-29 12:59 |只看该作者

求助:一个看似简单的问题

两种编译环境下追踪变量x的值最终都是9,但函数返回却是两个结果,如果是不编译器运算符的优先级和结合率有所不同导致的话,那也想知道576的结果是怎么出来的

论坛徽章:
0
4 [报告]
发表于 2005-03-29 13:28 |只看该作者

求助:一个看似简单的问题

现在知道原因了^_^

论坛徽章:
0
5 [报告]
发表于 2005-03-29 14:25 |只看该作者

求助:一个看似简单的问题

按我的理解,首先是编译器如何对待(++x),如果是当成表达式,x自加的结果将保存在临时存储,用于以后的计算(VC);如果仍然当成x变量,就不用保存(gcc),然后则是运算的优先级和次序。其实对这种问题继续研究是没什么意义的,只要知道存在这种情况,并且在程序中避免出现这中情况。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP