i = i 的未定义行为
C 标准将“未定义行为”定义为标准未明确指定的行为。这意味着编译器在遇到未定义行为时可以自由地生成它想要的任何代码,即使它会导致不可预测或错误的输出。
未定义行为的一个示例是将值分配给变量,该变量是即将修改。考虑以下代码片段:
<code class="cpp">i = 3; i = i++;</code>
根据标准,此代码将导致未定义的行为。然而,通常假设 i 的最终值为 4,无论计算顺序如何。这不一定是真的。
编译器可能会发出与以下任意代码等效的代码:
<code class="cpp">i = 3; int tmp = i; ++i; i = tmp; i = 3; ++i; i = i - 1; i = 3; i = i; ++i;</code>
在前两种情况下,i 的最终值为 4。然而,在第三种情况下,i 的最终值将是 3。
因此,假设 i 的最终值始终为 4 是不正确的。实际行为是未定义的并且取决于编译器。
作为一般规则,最好避免未定义的行为。如果您遇到表现出未定义行为的代码,请务必尽快修复它。
以上是为什么 `i = i` 会导致 C 中未定义的行为?的详细内容。更多信息请关注PHP中文网其他相关文章!