我是C的初学者。 当我尝试运行以下代码时:
#include <stdio.h>
int main(void) {
int a = 3, b;
b = printf("%d %d", a, a++);
a = printf(" %d", b);
printf(" %d", a);
return 0;
}
它告诉我:
error: operation on 'a' may be undefined [-Werror=sequence-point]
b = printf("%d %d", a, a++);
^
但在这里我只改变了一次的价值。为什么会出现序列点错误?
我正在使用-Wall -Werror标志。
答案 0 :(得分:3)
您确实只更改a
的值一次,但不保证参数a
和a++
的评估顺序。将首先评估a
或a++
,从而导致未定义的行为。