我做了编译器课程,现在我正在练习考试。其中一个主题是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”只存在于赋值/增量点,对吧?
基本上问题是,对于如上所述的循环,控制变量是在循环内还是在递增时?当然,除非在循环中使用该变量。
答案 0 :(得分:1)
变量“a”存在于1-2和4中,对吧?
是的,这是正确的。或者,由于我们通常在给定步骤之后或之前(而不是在此期间)讨论变量,我应该说:a
在步骤1之后,步骤2之前和步骤4之后生效(假设{{1}将在这些指示之后使用一段时间。)
对于如上所述的循环,控制变量是在循环内生效还是仅在递增时?
你必须考虑循环的每一步发生的时间。循环的执行看起来像这样:
因此,每次在身体执行之后,通过读取在执行主体之前设置的i的值来检查条件。这意味着我必须在整个身体执行期间保持活力。