我是 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++);
^
但是这里我只改变了一次 a 的值。那为什么会出现序列点错误呢?
我正在使用 -Wall -Werror 标志。
最佳答案
确实,您仅更改 a
的值一次,但不能保证参数 a
和 a++
的求值顺序。 a
或 a++
将首先被评估,从而导致未定义的行为。
关于c - 序列点警告说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29449945/