以上的結果我是寫:
7 7 8
8 9 9
9 9 8
8 7 7
但電腦結果卻是:
7 7 7
9 9 8
9 9 9
7 7 8
那個才對啊?不是說 ++a 為先加,而 a++ 是先取用?
問題是 C 並不保證逗點運算元是由左而右順序計算
最佳化方法不同會造成不同結果,例如
> printf("%d %d %d\n", a, a++, a);
> 7 7 7
順序可能是 1->3->2 (a, a, 再 a++) 或 3->1->2
> printf("%d %d %d\n", a, ++a, a);
> 9 9 8
順序是 3->2->1
> printf("%d %d %d\n", a, a--, a);
> 9 9 9
順序可能是 1->3->2 或 3->1->2
> printf("%d %d %d\n", a, --a, a);
> 7 7 8
順序是 3->2->1
所以嚴格說起來 printf("%d %d %d\n", a, --a, a); 的寫法是
有 bug 的程式,應該要避免
John Lin
所以也是說,當 "," 運算元是不保證由前往後 ( 左 -> 右 ) 的方式計算囉?
"伸羅" <sano...@bbs.cis.nctu.edu.tw> 撰寫於郵件
news:3jIHgM$6...@bbs.cis.nctu.edu.tw...