printf的執行順序
阿新 • • 發佈:2017-08-21
寫代碼 避免 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的執行順序