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);
}
我的理解是一个局部静态变量有"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);
}