C 序列点警告澄清

C 序列点警告澄清,c,sequence-points,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; } 但是这里我只改变了a的值一次。那么为什么会出现序列点错误呢 我使用的是-Wall-Werror标志。确实,您只更改了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;
}
但是这里我只改变了a的值一次。那么为什么会出现序列点错误呢


我使用的是-Wall-Werror标志。

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

类似问题计数===整数溢出!这个问题已经被问了很多次了!我想你会更快地用谷歌快速搜索而不是question@Rizier123我问了,但我只得到了printf(“%d%d%d”,a++,++a,a)类问题:/这是一样的!还有那些音调@Rizier123但是在这里我只改变变量一次。这就是为什么我不能得到它。但是你使用变量两次,有一次你增加它!但你不知道哪一个先得到评估!但这是如何导致序列点错误的呢?我是一名C语言的初学者,在我的大学里学习了四个月的编程入门课程。所以,一个更详细的解释可能会有帮助:/谢谢你的帮助。你想解释一下吗?
error: operation on 'a' may be undefined [-Werror=sequence-point]
b = printf("%d %d", a, a++);
                        ^