序列点警告说明
Sequence Point Warning clarification
我是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语言的初学者。 当我尝试 运行 以下代码时:
#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++
将首先被评估,从而导致未定义的行为。