【发布时间】:2012-02-22 01:30:18
【问题描述】:
我正在阅读 K&R,并且在评估 a[i]=i++ 之类的表达式时遇到了这个关于行为不确定性的示例;
6.5.2 美元的 C99 规范表明
在前一个和下一个序列点之间,对象的存储值最多只能通过表达式的评估修改一次。此外,应仅读取先验值以确定要存储的值。
上面来自 K&R 的示例在第一条陈述中成立。请解释它是如何在第二次失败的。
在涉及序列点的情况下,标准是否说明了子表达式的评估顺序。例如。 a[i++] || b[i++]。我知道这些是从左到右评估的,但是如何从上述陈述中得出,或者它是否在标准中的某处明确说明?
【问题讨论】:
-
@undur_gongor 据我所知,在序列点和评估顺序方面,C 和 C++ 没有区别。
-
@Lundin 感谢您提供的精彩链接。
-
@Lundin:那么,这可能是一个很好的答案的一部分。不过,这个问题不是重复的。
标签: c undefined-behavior language-lawyer