C本地和全局静态变量

时间:2015-07-15 09:29:27

标签: c global-variables static-variables

我的理解是本地静态变量具有“程序范围”;也就是说,一旦定义它就一直存在直到程序终止。此外,我的理解是,本地静态也可以在当前模块/ 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...
}

这不是有点倒退吗?我原以为它是另一种方式。所以我问:我的理解上面是否正确?如果是这样,那么在当前模块之外可以访问本地静态的动机是什么,而不是全局静态?

2 个答案:

答案 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);
}