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