由于stackexchange没有更多关于编译器标签的标签,所以我在这里发布这个问题。
如果同时满足以下三个条件,则称变量 x 在程序中的语句 Si 处有效:
1. There exists a statement Sj that uses x
2. There is a path from Si to Sj in the flow
graph corresponding to the program
3. The path has no intervening assignment to x
including at Si and Sj
在上述控制流图的基本块 2 中的语句和基本块 3 中的语句中都存在的变量是
- p, s, 你
- r、s、u
- r,你
- q, v
我试图解释:
正如维基百科所说:“简单地说:如果变量具有将来可能需要的值,则该变量是活动的。”
根据所讨论的定义,如果将来在任何新分配之前使用变量,则该变量是活动的。块 2 将 'r' 和 'v' 都作为实时变量。因为它们在分配给它们的任何新值之前在块 4 中使用。请注意,变量 'u' 不在块 2 中,因为 'u' 在块 3 中使用之前在块 1 中分配了一个新值。变量 'p'、's' 和 'q' 也不存在于块中2 出于同样的原因。块 3 只有 'r' 作为实时变量,因为每个其他变量在使用前都被分配了一个新值。
另一种解释为:
只有 r。
p、s 和 u 被分配到 1 中,在此之前没有中间使用它们。因此 p、s 和 u 不在 2 和 3 中。q 被分配到 4 中,因此不在 2 和 3 中。
v 在 3 时有效,但在 2 时无效。只有 r 在 2 和 3 时都有效。
但是官方的 GATE 键同时表示 r 和 u。