- #include <stdio.h>
- void main()
- {
- int i = 5;
- printf("%d %d %d %d %d %d\n", i, --i, i--,i, i--,i);
- }
先不公布输出结果,看看上述的源码,输出会是什么?
输出结果是:2 2 4 2 5 2
是不是很出乎意料;
因为
1、printf函数的参数压栈顺序是从右往左依次入栈的;
2、对于i--,先由ebp寻址函数栈空间来记录中间结果,然后再给printf压栈
对于--i,则直接压寄存器变量,寄存器经过了所有的自增操作。