【问题标题】:Sequence Point Warning clarification [duplicate]序列点警告说明 [重复]
【发布时间】:2015-06-09 14:12:07
【问题描述】:

我是 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 标志。

【问题讨论】:

  • 类似问题计数===整数溢出!这个问题已经被问过很多次了!我认为你会更快地进行快速谷歌搜索而不是问题
  • @Rizier123 我做了,但我只有 printf("%d %d %d", a++, ++a, a) 类型的问题:/
  • 也一样!还有那些音调!
  • @Rizier123 但在这里我只更改了一次变量。这就是为什么我无法得到它。
  • 但是你使用了变量两次,在一种情况下你增加了它!但你不知道哪个先被评估!

标签: c sequence-points


【解决方案1】:

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

【讨论】:

  • 但这如何导致序列点错误?我是 C 的初学者。过去四个月的学习是我大学编程课程介绍的一部分。因此,更详细的解释可能会有所帮助:/ 感谢您的帮助。
  • 反对者是否愿意解释?
猜你喜欢
  • 2017-11-05
  • 1970-01-01
  • 2018-10-30
  • 1970-01-01
  • 2015-08-21
  • 2012-08-17
  • 2013-02-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多