C 局部和全局静态变量

C local and global static variables

我的理解是一个局部静态变量有"program scope";也就是说,一旦定义它就会一直存在,直到程序终止。此外,我的理解是局部静态也可以在当前 module/C-file 之外访问,它们在以下位置定义:

void doSomething() {
    static int myVar = 5;   // Program scope & accessible to other modules
}

我的理解是全局静态变量也有程序作用域,但只对当前可见module/C-file:

static int myVar = 5;       // Program scope but "module private"
void doSomething() {
    // Whatever here...
}

这是不是有点倒退了?我本来希望它是相反的。那么请问:我上面的理解对吗?如果是这样,那么在当前模块之外访问局部静态而不是全局静态的动机是什么?

你把一切都搞砸了。静态局部变量是 隐藏来自其他函数的数据 但保留数据以供将来调用该函数的地方。

静态全局变量有

  • 静态存储时长(保留数据以供将来调用)
  • 内部链接(变量仅限于单个文件)和
  • 文件作用域(只能在当前文件中引用该变量)

静态局部变量有

  • 静态存储时长
  • 无联动
  • 块范围

没有。在给定模块中可以访问局部静态变量。

虽然在给定的 C 文件中可以访问全局静态变量。

局部静态变量的范围仅限于函数。
如您所见,以下代码给出了编译错误,因为它试图从 main 访问 "prox" 变量,即使它是静态的。

int main(void)
{
test();
printf("The PROX is : %d", prox);
}

test()
{
static prox;
prox=prox+5;
printf("INSIDE prox[%d]",prox);
}