循环中的变量活跃度

时间:2012-09-01 18:36:55

标签: variables compiler-construction for-loop

我做了编译器课程,现在我正在练习考试。其中一个主题是variable liveness

现在,在循环之外,如果我们有

1. int a = 1;
2. a++;
3. int b = 2;
4. a = b;

然后变量“a”存在于1-2和4中,对吧?

在循环内部,如果我们有

1. for (int i = 1; i < 3; i++)

然后没有其他操作在循环中使用“i”的值,比如检查它的值等等,那么“i”只存在于赋值/增量点,对吧?

基本上问题是,对于如上所述的循环,控制变量是在循环内还是在递增时?当然,除非在循环中使用该变量。

1 个答案:

答案 0 :(得分:1)

  

变量“a”存在于1-2和4中,对吧?

是的,这是正确的。或者,由于我们通常在给定步骤之后或之前(而不是在此期间)讨论变量,我应该说:a在步骤1之后,步骤2之前和步骤4之后生效(假设{{1}将在这些指示之后使用一段时间。)

  

对于如上所述的循环,控制变量是在循环内生效还是仅在递增时?

你必须考虑循环的每一步发生的时间。循环的执行看起来像这样:

  1. 我已初始化
  2. 身体执行
  3. 检查循环条件(读取在步骤1中设置的i的值)
  4. i递增(假设循环条件为真)
  5. 身体救出
  6. 检查循环条件(读取在步骤4中设置的i的值)
  7. ......依此类推,直至条件为假
  8. 因此,每次在身体执行之后,通过读取在执行主体之前设置的i的值来检查条件。这意味着我必须在整个身体执行期间保持活力。