对于在 C 函数中定义的静态变量,如下所示:
int f1()
{
static int var2 = 42;
var2++;
printf("var2=%d\n", var2);
}
var2
将存储在 .data
段中(因为它被显式初始化为 42
,感谢@busybee 指出这一点):
0000000000004014 l O .data 0000000000000004 var2.2316
var2
如果我没有显式初始化它或将其初始化为 0
将存储在 .bss
段中):
000000000000401c l O .bss 0000000000000004 var2.2316
var2
有2个方面:
- 它的生命周期与整个程序相同。
- 但它的范围仅限于
f1()
之内。
bss
部分用于未初始化的全局数据。而 data
部分用于初始化全局数据。 var2
存在于 bss
中,因此在某种意义上它必须是全局的。
我认为var2
只能在f1()
中访问的原因只是编译器放置的一些句法规则。如果我们遍历 bss
部分,则 var2
必须可以从 f1()
外部访问。我说得对吗?谢谢。
最佳答案
好吧,您可以对内存进行原始访问,所以整个世界都属于您,但它们有限的访问范围正是使用静态局部变量的全部意义所在。
它们是具有受控访问的全局状态,因此您可以应用本地推理。
如果您可以从外部访问它们,那么本地推理就可以解决了。此时,人们应该想:为什么不直接使用常规的全局变量?
关于c - 是否可以在声明它的函数之外访问静态局部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73516649/