1. 程式人生 > >關於使用while迴圈時,括號內用自加自減作條件的一個疑問

關於使用while迴圈時,括號內用自加自減作條件的一個疑問

《C Primer Plus》第五版第五章的一道思考題:

/*測試程式	2015.12.26*/

#include <stdio.h>
#define TEN 10

int main(void)
{
	int n = 0;

	while(n++ < TEN)
		printf("%5d", n);
	printf("\n");

	return 0;
}


開始我認為輸出結果為 0  1  2  3  4  5  6  7  8  9  10,但是在VC++6.0中驗證之後發現結果為 1  2  3  4  5  6  7  8  9  10。


《C Primer Plus》第五版第五章(P104)有一段說明:

順序點幫助闡明後綴增量動作何時發生。例如,考慮下面的程式碼:

while (guests++ < 10)
      printf ("%d \n", guests);

有時C的初學者會設想在本程式中“先使用該值,然後增加它的值”的意思是在使用了printf()語句後再增加guests的值。然而,因為guests++<10是while迴圈的判斷條件,所以它是一個完整的表示式,這個表示式的結束就是一個順序點。因此,C保證副作用(增加guests的值)在程式進入printf()前發生。同時使用字尾形式保證了guests在與10比較後才增加。