c++ - 如何在 for 循环中获得事件变量的数量?

标签 c++ c llvm

考虑以下代码:

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;
}

在上面的代码中,三个变量的生命周期包含在循环体中(icd)。我希望能够使用 LLVM 计算其生命周期存在于任何给定循环主体中的变量(即对于这个循环,我的代码应该返回 3)。

我找到了 Live Variables Analysis ,但我无法使用它来查找我上面描述的内容。

最佳答案

也许这应该只是一个注释,但我无法表达内联代码:

只有两个变量在循环体内有持续时间。 i 在循环开始之前声明,并持续到循环体的最后一次执行之后。换句话说,c 和 d 被构造/破坏了 3 次;在第三次被破坏后,则 i 是。

因此,您编写的 for 循环相当于:

{
    int i = 0;
    while (i < 3)
    {
        a = 2;
        int c = 1;
        int d = 3;
        d = a + c;

    }
    i++;
}

额外的大括号集合调用 block 作用域; i 超出范围并在 for 循环体之外被销毁,但在任何后续代码之前。

关于c++ - 如何在 for 循环中获得事件变量的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48019154/

相关文章:

c - 程序无法运行(编译问题)

ios - CocoaPods Swift 链接器错误

c++ - 在 Visual Studio 中调试 mex 函数

c++ - 我正在尝试调用一个函数。这些愚蠢的编译错误的原因是什么?

c++ - memcpy 行为异常

c - 将可变数量的参数传递给 C 函数

c++ - 以某种方式缓冲或包装 cin,以便我可以使用 tellg/seekg?

c++ - 使用 OPEN_ALWAYS 的 CreateFile Win32 API 调用以一种奇怪的方式失败

python - 我可以在 OS X 上使用 Numba 吗?

LLVM 将函数标记为 const 并删除重复调用