无法理解的printf输出有关问题,(从右向左求值,从左向右输出?)?

无法理解的printf输出问题,(从右向左求值,从左向右输出??)??
int   i=8;
printf( "%d\t%d\t%d\t%d\t%d\t%d\n ",i,++i,--i,i--,i++,-i--);
printf( "%d\n ",   i);
为什么输出结果为:
8               8               7               8               8               -8
7
怎么解释?

------解决方案--------------------
对于printf(..)这样的可变参数的函数,调用约定应该是__cdecl,即函数的参数是从到右压入栈中,由调用者(Caller)释放栈。这里的关键是由调用者释放栈,原因是对于可变参数的函数,在函数内部是不知道参数的个数的,所以只有在函数调用的外部,即调用者来释放栈。

------解决方案--------------------
对于一个函数调用来说,参数的求值顺序,压栈顺序和使用顺序是毫不相关的三件事。
而且前两者都是跟平台相关的。

而只有对参数的使用顺序是确定的——显然嘛,怎么使用这些参数完全是函数的实现者决定和控制的。如果编函数的人连这点事都控制不了,那咱们都别编程了。因为你不知道那个参数是那个。

当然,如果你有兴趣,也可以编个函数,按随机顺序输出传给它的参数,但那是另一回事,而且更说明了你可以控制这个顺序,嘿嘿。
------解决方案--------------------
虽然没什么意思,不过这个问题还是可以解释的
1.从右到左入栈
2.后置的加1减1运算在printf调用之后起作用
3.前置的加1减1运算在printf调用之前起作用

4.按照上面3条就解释通了