序列点警告说明

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 的值一次,但不保证参数 aa++ 的计算顺序。 aa++ 将首先被评估,从而导致未定义的行为。