今天在书上看到一道题目没看明白
printf("%d",++x,x++);,上面说这个是对的,“%d”,++x,x++是函数printf的三个实参数,我不理解,大家能给我详细点的解释吗,谢谢啦:)
还有printf("%d",a=a+1,b--,c+1);
问题点数:100、回复次数:14Top
1 楼shaoboailinglijun(邵波爱凌丽君)回复于 2006-03-04 12:44:33 得分 8
“%d”是说输出的一个整数;
++x是递增的前置,意思是加一个1再输出;
x++是递增的后置,意思是输出后再加1。
Top
2 楼tri_stone(XHL)回复于 2006-03-04 12:48:30 得分 0
这个我知道啊,我的意思是,后面是++x,x++是两个,前面的"%d"也应该是两个啊,后面应该和前面对应啊Top
3 楼houdy(致力于图像/图形领域,成为有思想的程序员)回复于 2006-03-04 14:49:20 得分 8
会不会是逗号表达式,不常用的。写成这样会不会好看一点:
printf("%d",++x,x++); ==> printf("%d",(++x,x++));
printf("%d",a=a+1,b--,c+1); ==> printf("%d",(a=a+1,b--,c+1));
PS:鄙视一下写出这样代码的人,建议看看代码风格相关的书。
Top
4 楼lovefreex(笨わ孩)回复于 2006-03-04 14:52:10 得分 8
严重同意楼上的观点,代码风格很重要Top
5 楼Rick_ang(东方未名)回复于 2006-03-04 15:19:00 得分 6
是逗号表达式Top
6 楼kikikind(可乐)回复于 2006-03-04 15:32:27 得分 5
printf是标准输出库函数呀!!~~~~~其实也是在调用函数!!Top
7 楼dx30611(想要clean code)回复于 2006-03-04 15:42:08 得分 4
显然是逗号表达式,表达式的结果是最后一个的结果Top
8 楼theory88(伟)回复于 2006-03-04 15:57:15 得分 8
举八只手同意是逗号表达式!Top
9 楼ox_thedarkness()回复于 2006-03-04 16:06:30 得分 7
....不是逗号表达式
这道题目是错误的。
函数调用只有一个求值顺序点,所有参数表达式运算顺序、以及其副作用顺序是不确定的。
前几天还有人问了类似问题,bs这些出书误人子弟的作者和出版社们。
问题讨论贴见:
http://community.csdn.net/Expert/topic/4583/4583943.xml?temp=.4103052
最终结论:
http://blog.csdn.net/ox_thedarkness/archive/2006/03/01/613122.aspxTop
10 楼ox_thedarkness()回复于 2006-03-04 16:08:52 得分 6
有兴趣,但是没精力全篇阅读标准的话,也不想读那篇结论或者有异议的话,
找ISO C99 标准,看下面这里:
[C99] 6.5.2.2 Function call
条款12 EXAMPLE 在下面的函数调用中:
(*pf[f1()]) ( f2(), f3() + f4() )
函数 f1 f2 f3 和f4 可能以任何顺序被调用。 但是,所有副作用都必须在那个 pf[ f1() ] 返回的函数指针产生的调用前完成。
Top
11 楼mfs(玩命蚂蚁)回复于 2006-03-04 16:13:37 得分 10
printf("%d",++x,x++);
这个是逗号表达式,输出最右边的值.如果x=1,刚输出2,而X的值最后变成了3Top
12 楼houdy(致力于图像/图形领域,成为有思想的程序员)回复于 2006-03-05 09:55:04 得分 10
int i = 0;
printf("%d\n",++i,i++);
printf("%d\n",i);
我在WinXP + SP2, VS2003下测试了一下,编译可以通过,运行的结果是都是2。不知道这样的接过能说明什么问题?Top
13 楼zhNKUjw(淡淡的云彩悠悠的游)回复于 2006-03-05 10:01:57 得分 10
不是逗号表达式Top
14 楼ox_thedarkness()回复于 2006-03-05 10:54:20 得分 10
- - 结果说明,VS7 对本代码,在你的上下文代码下,在你当前选择的编译选项下,结果是2。
不能说明其他任何东西。Top




