我正在阅读 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/