当我们有 2 个具有相同标识符的变量时,为什么函数使用全局变量并跳过局部变量

问题描述 投票:0回答:1

据我所知,当我使用一个函数时,它会创建一个从主堆栈帧嵌套的堆栈帧,并且根据这一点,当引用一个变量并且未在函数作用域中声明该变量时,该函数会逐渐进入到更大的范围,所以这里它应该先到本地范围,然后再跳转到全局,否则我误解了它?

#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);
}
c function scope
1个回答
0
投票

在您的示例中,来自 main 的

X
在函数
Scope
中不可见,因为 Scope 是一个单独的函数,并且它看不到来自其他函数的自动存储持续时间变量。它只能看到“全局”或编译单元静态存储持续时间变量。

© www.soinside.com 2019 - 2024. All rights reserved.