c - 如何在机器级别或内存级别的编译器中实现变量的范围

标签 c scope

编译器如何实现变量的作用域? 我的意思是,当我们说静态变量时,范围仅限于在定义静态变量的同一文件中定义的 block 或函数? 这是如何在机器级别或内存级别实现的?

这个限制实际上是如何实现的?

如何在程序运行时解决这个范围?

最佳答案

在机器层面根本达不到。编译器在实际生成机器代码之前检查作用域。 C 的规则是由编译器实现的,而不是由机器实现的。编译器必须检查这些规则,而机器不会也不能。

关于编译器如何检查的非常简单的解释:

每当引入一个作用域时,编译器都会给它起一个名字,并将它放在一个结构(树)中,这样可以很容易地确定该作用域相对于其他作用域的位置,并将其标记为当前范围。声明变量时,会将其分配给当前范围。访问变量时,会在当前范围内查找它。如果未找到,则查找树以查找当前范围之上的范围。这一直持续到我们到达最顶层的范围。如果仍未找到该变量,则说明存在范围冲突。

关于c - 如何在机器级别或内存级别的编译器中实现变量的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13199778/

相关文章:

c - 生产者消费者唯一互斥锁

在不使用 strcmp 的情况下比较 C 中两个二维数组的元素

c - 如何将文件逐行读入结构体?

c++ - 函数是否在退出作用域时清除动态内存?

javascript - JS如何访问函数外的变量

c - 通过多进程以附加模式打开文件

c - 在C中填充动态分配数组的指针算法

javascript - var函数和javascript中的函数有什么区别?

python - 在python中更改函数内的全局变量

JavaScript setInterval 范围问题 : an alternative to bind