考虑以下代码:
int main() {
int a = 0;
int b = 1;
for (int i = 0; i < 3; i++) {
a = 2;
int c = 1;
int d = 3;
d = a + c;
}
a = b+2;
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码段中,三个变量的生命周期包含在循环体(i,c和d)中.我希望能够使用LLVM计算任何给定循环体中存在寿命的变量(即对于此循环,我的代码应该返回3).
我找到了实时变量分析,但是我无法使用它来查找我上面描述的内容.
也许这应该只是一条注释,但我无法内联表达代码:
只有两个变量在循环体内具有持续时间。i 在循环开始之前声明,并持续到循环体最后一次执行之后。换句话说,c和d被构造/销毁3次;第三次它们被破坏后,我就被破坏了。
因此,您编写的 for 循环相当于:
{
int i = 0;
while (i < 3)
{
a = 2;
int c = 1;
int d = 3;
d = a + c;
}
i++;
}
Run Code Online (Sandbox Code Playgroud)
额外的大括号组调用块作用域;i 超出范围并在 for 循环体之外、但在任何后续代码之前被销毁。
| 归档时间: |
|
| 查看次数: |
569 次 |
| 最近记录: |