不是都是可以在全局使用的变量?
函数里定义的static变量是属于函数,不能再外部访问,而定义一个全局变量只是在特定函数里访问的话代码的可读性和可维护性不好,例如:
#include <stdio.h>
int counter(){
static int c = 0;
return c++;
}
int main(){
printf("%d\n",counter());
printf("%d\n",counter());
}
指的是定义在文件全局作用域的变量,简单来讲就是函数外面,作用域是整个程序
,生存期是从程序开始到结束
。
// a.c
int g_var1; // 全局变量,其他文件内可以访问到
static int g_var2; // 其他文件不可以访问到
// b.c
extern int g_var1;
void f(void)
{
//使用变量 g_var1
}
就是使用static
声明的变量
// c.c
extern int g_var2; // 尝试引用其他文件的全局变量
void f2(void)
{
static int s_var1; // static变量
// ... 使用 s_var1
s_var1 = g_var2; // !! 错误,g_var2只在a.c里可用
}
static使用
加在全局变量上使全局变量变成了文件内全局变量
,其他文件不可见
加在函数作用域的自动变量
上就会将变量的生存期从函数开始到结束改变为从程序开始到结束
全局 和 局部 是 变量 的定义域,
static 是 变量 的 存活期,
两个不同的概念~