编译器如何知道它超出了范围?

San*_*eep 0 c# compiler-construction scope

Main()
{
  int i =0;
  ...
  ...
  while(true)
  {
   int k =0;
   ...
   ...
  }
// K is out of scope..
}
Run Code Online (Sandbox Code Playgroud)

编译器如何知道K超出范围?

Eri*_*ert 6

编译器如何知道[局部变量]超出范围?

首先,让我们仔细定义您正在使用的术语.该范围命名实体的是程序文本的区域中,它是合法使用的实体的名称,没有名称的其他条件.

一个局部变量的范围由说明书中的程序文本的区域,该区域是定义整个块的是立即包含声明.

编译器通过跟踪与每个语法块关联的本地声明空间来确定局部变量的范围.当我们需要解析一个名字时,我们会找出名称用法的内容,并查阅相关的声明空间.当然,块嵌套,局部变量声明空间也是如此,因此我们可能需要从内到外的顺序查询多个.

我们使用的实际数据结构是简单的哈希表,针对编译器所需的各个方面进行快速查找和过滤而优化.(例如,我们有时需要查找名称,但只想获取类型,或只需要方法,等等.)

这是否回答你的问题?这是一个相当不明确的问题.