|
@@ -244,10 +244,10 @@ printf("%d %d %d %d\n", i, a[1], a[2], a[3]);
|
|
|
注意这里要出现意外了 —— 等价于 `i = i`,除非,或许 `i` 是 `volatile` 的。)
|
|
|
然而 —— 请仔细听好我说的话,因为我在引述多数人的观点 —— 这些假设的
|
|
|
“定义良好的”规则,或许陈述足够简单,或许足够精确,
|
|
|
-或许能广泛适用于我们感兴趣的各种场合,会导致非常烂的性能,
|
|
|
+或许能广泛适用于我们感兴趣的各种场合,但是会导致非常烂的性能,
|
|
|
就像在 ANSI 标准化之前传统 C 语言曾经有过的那样。如果这样做,
|
|
|
编译器在优化时必须严格按照基于优先级和结合性的解析结果确定求值顺序,
|
|
|
-结果就不能重新安排表达式的各个部分,从而最好地使用目标机器的指令、
|
|
|
+结果就不能重新安排表达式的各个部分,以最好地使用目标机器的指令、
|
|
|
寄存器、流水线、并行化,以及其他各种功能。
|
|
|
|
|
|
当人们讨论为什么 `i++ * i++` 未定义时,他们往往以现代的并行计算机作为例子,
|
|
@@ -279,7 +279,7 @@ int i = 7;
|
|
|
print("%d\n", i++ * i++);
|
|
|
```
|
|
|
|
|
|
-为什么会输出 49 而不是 56 的原因(不,我不会试图说明为什么可能是 42。)
|
|
|
+为什么可能输出 49 而不是 56 的原因(不,我不会试图说明为什么可能是 42。)
|
|
|
|
|
|
如果你现在还在读我的解释(已经写了 300 行了,我知道你可能已经放弃了,
|
|
|
但如果你坚持想要一个合理的解释,那你最好读完),
|