1. 程式人生 > >printf的執行順序

printf的執行順序

寫代碼 避免 printf函數 csdn 順序 pre 環境 spa 意義

printf()函數的參數,在printf()函數讀取時是從左往右讀取的,然後將讀取到的參數放到棧裏面去,

最後讀取到的就放在棧頂,處理參數的時候是從棧頂開始的,所以是從右邊開始處理的.
                                  --printf()函數的特點.

所以printf的執行順序是從 從右到左進行運算


註意:我們在寫代碼時,盡量避免無確定意義的表達式出現,因為不同的編譯器,可能會采用不同的理解方式.


附上一個例子:


#include<stdio.h>   
void main()   
{   
    int i=2;   
    printf(
"%d,%d,%d,%d,\n",i++,++i,i,i++); printf("%d\n",i); }

首先,應該說明的是在不同的編譯環境中結果是不一樣的。

關於本段代碼在VC++6.0中的規則如下:
1、printf函數的執行順序是由右到左的
2、前自增運算符(++i)先加1,再使用i,此時i已經加了1;
3、後自增運算符(i++)先使用i,再加1,***註意這裏是關鍵所在,VC++6.0後自增運算是要在整條語句結束以後才自加1的!

所以:
printf("%d,%d,%d,%d,\n",i++,++i,i,i++);
從右往左運算:
i++得到2(i=2,後加1在整條語句執行完才進行,這裏先記下)
i還是2 (i=2,原因見上一行)
++i得到3(i=3,先加1,後使用)
i++得到3(i=3,後加1在整條語句執行完才進行,這裏先記下)
所以輸出結果為:3,3,2,2
然後計算剛才的兩次後自增運算後,i=5

printf("%d\n",i);
所以,結果是5

參考鏈接:http://blog.csdn.net/bingxuewujian/article/details/6728396

printf的執行順序