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));