序列点警告说明

时间:2015-04-04 18:26:31

标签: 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;
}

它告诉我:

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

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

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

1 个答案:

答案 0 :(得分:3)

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