据我所知,当我使用一个函数时,它会创建一个从主堆栈帧嵌套的堆栈帧,并且根据这一点,当引用一个变量并且未在函数作用域中声明该变量时,该函数会逐渐进入到更大的范围,所以这里它应该先到本地范围,然后再跳转到全局,否则我误解了它?
#include <stdio.h>
#include <windows.h>
int X = 2;
void Scope(void);
int main()
{
int X = 3;
Scope();
return 0;
}
void Scope(void)
{
printf("Entering X = %d\n" ,X);
printf("Exiting X = %d\n" , X*X);
}
在您的示例中,来自 main 的
X
在函数 Scope
中不可见,因为 Scope 是一个单独的函数,并且它看不到来自其他函数的自动存储持续时间变量。它只能看到“全局”或编译单元静态存储持续时间变量。