我正在学习 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/