重複の可能性:
未定義の動作とシーケンス ポイント
以下のコードを手作業で作成します。
#include <stdio.h>
int func (int a, int b) {
static int c = 1;
return a + b * (c *= -1);
}
int main () {
int a = 2, b = 3;
int c = func(a, b);
a *= a++;
b *= ++b;
printf("%d %d %d %d\n", a, b, c, func(a, b));
}
printf()
の変数を次のように計算します。
a = 5, b = 16, c = -1, func(a, b) = -11
ただし、私のコンパイラは、最後の値が実際には 21 であることを教えてくれます。
出力:
a = 5, b = 16, c = -1, func(a, b) = 21n
私は自分の価値を次のように計算します(16*-1) + 5
どこが間違っているのか誰か教えてもらえますか?