想象一下,以下语句(来自虚构的C语言)会变得更加简单:
1| for (int i = 0; i < 10; ++i)
2| {
3| // do work
4| }
当然,关键点是初始化程序中的int i = 0
,我们假设:
i
超出范围,我们无法引用它。这意味着这个特定的for-loop会出现:
{
int i = 0;
while (i < 10)
{
// do work
++i;
}
}
导致创建范围的唯一目的是包含增量变量。
我完全理解具体是针对任何允许在经典样式for循环中声明的语言定义的实现。我只是好奇这是否如何在幕后工作,至少在创建初始AST时。
答案 0 :(得分:1)
我认为这正是编译器为您所做的事情。如果您尝试在LLVM上编译两个代码,则可以看到此信息,例如:使用clang -S -emit-llvm并比较结果。