首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

printf的变量列表,1定是从右到左的求值顺序吗

2013-12-11 
printf的变量列表,一定是从右到左的求值顺序吗?例如,我有一个打印语句printf(%d,%d,%d\n,f1(),f2(),f3()

printf的变量列表,一定是从右到左的求值顺序吗?
例如,我有一个打印语句
printf("%d,%d,%d\n",f1(),f2(),f3());

请问: c/c++的标准有没有规定,printf语句的求职顺序,"一定"是f3,f2,f1这样子的?
还是说,由编译器自行决定?

谢谢。
[解决办法]
请参考 K&R 《C程序设计语言》第二版 (徐宝文等译 机械工业出版社) 第42页

2.12  运算符优先级与表达式求值次序

    同样,在函数调用中各个变元的求值次序也是未指定的。因此,函数调用语句
        printf("%d %d\n", ++n, power(2, n));   /* 错 */
    对不同的编译程序可能会产生不同的结果(视n加一运算是在power调用之前还是之后而定)。为了解决这一问题,可把该语句改写成:
        ++n;
        printf("%d %d\n", n, power(2, n));



详细解释请参考置顶帖http://bbs.csdn.net/topics/370153775
[解决办法]
由编译器决定, C标准6.5.2.2.10
The order of evaluation of the function designator, the actual arguments, and subexpressions within the actual arguments is unspecified, but there is a sequence point before the actual call.

热点排行