【问题标题】:what happen first when i do this kind of Increment in an assignment? [duplicate]当我在作业中做这种增量时首先会发生什么? [复制]
【发布时间】:2014-10-16 20:43:29
【问题描述】:

我有这样的表达方式:

B[i]=B[++i]*i;

在 C 中这是未定义的?

首先会发生什么?先计算赋值符号的右边,还是左边?

【问题讨论】:

  • 未定义。如果你不明白这意味着什么,你为什么要编写这样的代码?
  • @BillLynch 是来自测试的问题......他们询问程序的输出是什么,并且代码具有该表达式。对我来说是不确定会发生什么,我可以我是对的,谢谢...
  • 所以,测试要么期望 UB 作为答案,要么就是垃圾。我给后者十比一的赔率。
  • @exsnake - 唯一的答案是“是的,它是未定义的。”
  • 也有点相关:Assignment operator sequencing in C11 expressions ...我在回答中引用的缺陷报告为评估这些类型的构造提供了一个很好的框架。如果你能理解这个证明,它将帮助你理解很多这样的案例。

标签: c


【解决方案1】:

它是未定义的,可以按任何顺序计算。

【讨论】:

  • “任何订单”的保证比实际保证的要多,这不算什么。
  • @Deduplicator “任意顺序”保证什么?对我来说,它看起来就像什么都没有。
  • 任何顺序都保证它会以某种顺序进行评估,但 UB 意味着它只是毫无意义的,任何事情都可能发生。
猜你喜欢
  • 1970-01-01
  • 2019-10-20
  • 1970-01-01
  • 1970-01-01
  • 2013-02-25
  • 1970-01-01
  • 2021-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多