では、2 つの別個のコード フラグメントに対して、インクリメンタ/デクリメンタの動作が異なるのはなぜでしょうか?
フラグメント A:
i=7; j=8; k=9;
printf("%d\n", i - 7 && j++ > k);
printf("%d %d %d", i, j, k);
次の出力が生成されます。
0
7 8 9
フラグメント B:
while (i > 0)
printf("T minus %d and counting\n",i--);
これを生成します:
T minus 5 and counting
T minus 4 and counting
T minus 3 and counting
T minus 2 and counting
T minus 1 and counting
j
これで、関数への引数が値で渡されること、およびブール式で使用されるという事実と何らかの関係があるに違いないことがわかりました。しかし、この 2 つの状況は矛盾しているように思えます。何が起きてる?