短路布尔运算符的代码生成



如果短路,结果会有所不同的boolean expression示例是什么 与完全计算布尔表达式相比,使用计算。然后我想知道我该如何根据三个地址来勾勒它 用于布尔表达式短路计算的中间代码?

短路布尔值最常见的用途是确保不执行未定义的计算。换句话说,与其说表达式的值随短路而不同,不如说表达式的值是明确定义的。

例如,考虑一个常见的 C 习惯用法:

if ( ptr != NULL && *ptr == some_value ) { /* Do something */ }

在这种情况下,短路&&确保指针在碰巧NULL时不会被取消引用。通过全面评估,如果第一个条件为假,计算可能会做一些非常不希望的事情(如段错误(。

由于短路求值的要点是有条件地不求值表达式的一部分,因此 TAC 实现需要在计算左侧表达式之后包含一个条件分支语句。换句话说,上述语句将以与等效语句非常相似的方式编译:

if ( ptr != NULL ) {
if ( *ptr == some_value ) {
/* Do something */
}
}

这大概是通过两个条件跳转来实现的。

我不确定这与语义分析或类型检查有什么关系。

最新更新