printf函数压栈解惑

        最近看到一些程序员的笔试题目,经常会考到printf函数的参数压栈问题,总体来讲就是参数从右向左依次压栈,再出栈,但是今天看到一个看似很简单的题目,却一直找不到头绪。题目如下:

#include 

void main()
{
    int i = 5;
    printf("%d %d %d %d\n", i, --i, i, i--);
}


        输出看似很简单,但是结果却打出所料。输出是“3 3 3 5”。

        似乎仅仅从压栈顺序上很难解释清楚,google找到了事情的真相:

       “对于a++的结果,是有ebp寻址函数栈空间来记录中间结果的,在最后给printf压栈的时候,再从栈中把中间结果取出来;而对于++a的结果,则直接压寄存器变量,寄存器经过了所有的自增操作。”

       原文请见:http://www.zzzj.com/html/20090609/71613.html 



你可能感兴趣的