gpt4 book ai didi

c - 函数局部的静态变量

转载 作者:行者123 更新时间:2023-12-02 08:38:23 26 4
gpt4 key购买 nike

我正在学习 C 中的存储类。我有一个简单的代码

enter code here
int f1()
{
static int i=0;
i++;
printf("%d",i);
}

int f2()
{
printf("%d",i);
}

int main()
{
f1();f2();f1();f2();
}

编译器给出错误,因为“i”在 f2() 中未声明。正如我所想,内存静态变量分配在程序内存的数据部分。因此该文件中的任何函数都应该能够访问它。

编译器如何知道在函数中局部声明的变量仅限于该函数?编译器如何评估它?

最佳答案

尽管 static 变量的生命周期与定义它的范围无关(不同于具有自动存储持续时间的变量):

{
static int i=0;
i++;
...
{
i++; // <-- still well defined, even in nested scope
}
}
i++; // <-- undefined

它只能在这个范围内访问。编译器只是检查符号 i 之前是否定义过,它发现 i 没有在该范围内定义(static int i=0; 定义了一个可在本地访问的变量~编译器不关心它的生命周期)。

如果您需要在其范围之外访问它,则必须通过引用(其地址)将其传递出它或将其设为全局:

static int i = 0;
...
{
i++;
}
...
i++; // <-- accessing global variable

关于c - 函数局部的静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18980481/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com