打印
[嵌入式linux]

C语言咋回事了?搞不懂了,能猜出运行结果吗?

[复制链接]
1969|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ddb_21ic|  楼主 | 2012-2-22 22:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
能猜出运行结果吗?

void xprint(int a, int b, int c){
printf("%d  %d  %d \n", a, b, c);
}

void main()
{
int x;

x = 2;
xprint(x++, ++x, x+1);

x = 2;
xprint(x++, x++, x++ );

x = 2;
xprint(++x, ++x, ++x);

printf("\n *** Press any key to continue *** \n");
getch();
}

相关帖子

沙发
ddb_21ic|  楼主 | 2012-2-22 22:06 | 只看该作者
在我印象中,结果应该是:
2 4 5
2 3 4
3 4 5
在Visual Studio 2008中运行后,居然是:
3 4 5
4 3 2
5 5 5
怎么回事呢?

使用特权

评论回复
板凳
aozima| | 2012-2-22 22:41 | 只看该作者
谁在产品中写这种代码直接T掉。

使用特权

评论回复
地板
caoqing1314| | 2012-2-25 16:59 | 只看该作者
不同的编译器执行流程是不同,从左到右,从右到左,从两边到中间都是不同,不过这种问题没必要纠结

使用特权

评论回复
5
ddb_21ic|  楼主 | 2012-2-27 14:52 | 只看该作者
看了下反汇编,总算明白了
我还以为C语言经过那么多次ISO,应该会有确定的答案了

使用特权

评论回复
6
ddb_21ic|  楼主 | 2012-2-27 14:53 | 只看该作者
反汇编中,是把每个表达式计算完之后才push的

使用特权

评论回复
7
inzaghian| | 2012-3-1 14:35 | 只看该作者
何必呢

使用特权

评论回复
8
sz_longyue| | 2012-3-2 13:12 | 只看该作者
没事找抽型

使用特权

评论回复
9
mindshare| | 2012-6-12 17:50 | 只看该作者
在不同的编译器中会有不同的结果

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

105

主题

1106

帖子

3

粉丝