可能重复:
未定义的行为和序列点
手动编写以下代码:
#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
谁能告诉我哪里出错了?