码迷,mamicode.com
首页 > 其他好文 > 详细

解释int a=9;printf("%d,%d",a,a++)?输出情况

时间:2015-06-22 17:55:10      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:c语言

结论取自知乎前辈:

任何在同一个表达式内多次使用++/--的C语言题目都无助于你学习C语言。

这种行为是未定义的行为,换句话说,结果是多少是不确定的。不要过分去研究这类题目,没有意义。同时正确的代码里也不应该有这种不确定结果的表达式出现,在项目代码里,一般来说都严格禁止这样使用。

下面解释原因:

首先,printf的入栈顺序是从右到左,任何一个标准库的printf都是这样的,否则printf无法在栈顶取到最左边的第一个参数。

那么,你的这个题目的一种可能的运行状态是:

1.a的值,入栈(右边第一个参数),此时a的值是92.a执行++操作;
3.a的值,入栈(右边第二个参数),此时a的值是104. 参数"%d,%d"(指针),入栈;
5. 调用printf

所以输出的结果就是10,9

但以上只是一种可能的运行状态。

也可能是下面这种:

1.a的值,入栈(右边第一个参数);
2.a的值,入栈(右边第二个参数);
3. 参数"%d,%d"(指针),入栈;
4.a执行++操作;
5. 调用printf

因为编译器可能优化代码,如果是这种情况,那么输出结果就是9,9

因为C标准里没有规定具体++执行的时间点在哪,所以这种问题没有标准答案。

再说一句,实际项目工程代码里,禁止用这种有歧义的写法。

解释int a=9;printf("%d,%d",a,a++)?输出情况

标签:c语言

原文地址:http://blog.csdn.net/xd_122/article/details/46594139

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!