序列点警告说明

Cra*_*ool 2 c sequence-points

我是 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;
}
Run Code Online (Sandbox Code Playgroud)

它向我展示:

error: operation on 'a' may be undefined [-Werror=sequence-point]
b = printf("%d %d", a, a++);
                        ^
Run Code Online (Sandbox Code Playgroud)

但在这里我只改变了一次的值。那为什么会出现序列点错误呢?

我正在使用 -Wall -Werror 标志。

hac*_*cks 5

确实,您a只更改了一次值,但参数评估的顺序aa++不能保证。首先将评估或aa++从而导致未定义的行为。