我正在阅读 K&R 并且在评估像 a[i]=i++ 这样的表达式时遇到了这个关于行为不确定性的例子;
6.5.2 美元的 C99 规范说



上面来自 K&R 的例子适用于第一条语句。请解释它如何在第二个失败。

在涉及序列点的情况下,标准是否说明了子表达式的评估顺序。例如。 a[i++] || b[i++] 。我知道这些是从左到右评估的,但是如何从上面的陈述中推导出来,或者它是否在标准中的某处明确说明?

最佳答案

在序列点的情况下,标准是否说明了子表达式的评估顺序?

在条件运算符 &&|| 的情况下,评估顺序是明确定义的,这就是短路有效的原因。

它由 c99 标准明确指定。

引用: c99 标准

附件 J:J.1 未指定的行为



进一步,
6.5.14 逻辑 OR 运算符



以及逻辑与:

6.5.13 逻辑 AND 运算符

关于c - 序列点和评估顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9060747/

10-13 08:25