我的理解是本地静态变量具有“程序范围”;也就是说,一旦定义它就一直存在直到程序终止。此外,我的理解是,本地静态也可以在当前模块/ C文件之外访问它们:
void doSomething() {
static int myVar = 5; // Program scope & accessible to other modules
}
我的理解是全局静态变量也有程序范围,但它们只对当前模块/ C文件可见:
static int myVar = 5; // Program scope but "module private"
void doSomething() {
// Whatever here...
}
这不是有点倒退吗?我原以为它是另一种方式。所以我问:我的理解上面是否正确?如果是这样,那么在当前模块之外可以访问本地静态的动机是什么,而不是全局静态?
答案 0 :(得分:3)
你搞砸了所有人。静态局部变量是隐藏其他函数的数据的地方,但保留数据以供将来调用该函数。
静态全局变量
静态局部变量
答案 1 :(得分:0)
本地静态变量仅限于该函数的范围。
如您所见,以下代码会出现编译错误,因为它试图访问" prox"变量来自main,即使它是静态的。
int main(void)
{
test();
printf("The PROX is : %d", prox);
}
test()
{
static prox;
prox=prox+5;
printf("INSIDE prox[%d]",prox);
}