c - 序列点警告说明

标签 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++);
                        ^

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

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

最佳答案

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

关于c - 序列点警告说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29449945/

相关文章:

c - 如果 p 是指向 int 的指针,那么在哪里使用 &p

c - C 编程中数组的奇怪输出

c++ - 为什么 a = (a+b) - (b=a) 是交换两个整数的错误选择?

perl - 在单个语句(Perl 5与Perl 6)中进行后增量和变量重用

c++ - printf 函数参数之间的序列点;转换之间的顺序点重要吗?

c - dup2 一个文件的套接字

一个程序可以同时在同一个 FILE* 上调用 fflush() 吗?

c++ - 如何只读入特定数量的字符

c - 为什么这些构造使用增量前和增量后未定义的行为?

c++ - 将二维点序列作为参数传递给 cvFitLine