static:块作用域、无链接、静态存储期。
C变量有三种链接属性:外部链接、内部链接、无链接。
外部链接变量可以在多文件程序中使用。
内部链接变量只能在一个翻译单元中使用。
“内部链接的文件作用域”简称“文件作用域”
“外部链接的文件作用域”简称“全局作用域”、“程序作用域”
例子:
int a = 1; //文件作用域、外部链接
static int b = 2; //文件作用域、内部链接 //静态全局变量
static:使该变量只在这个源文件中可用,称之为全局静态变量,全局静态变量就是静态全局变量。
该文件和同一程序的其他文件都可以使用变量 a 。但是,变量 b 属于文件私有,该文件中任意函数都可以使用它。
静态变量:静态意指该变量在内存中原地不动,并非其值不变。
在程序离开它所在程序时,这些变量不会消失。具有静态存储期。计算机在多次函数调用之间会记录它的值。
例子:
void print_1(void);
int main(void)
{
for(i=1 ; i<=3 ; i++)
print_1(void);
}
void print_1(void);
{
static a = 1;
printf("a = %d\n",a++);
}
输出:
a = 1
a = 2
a = 3
可以看出:a 只被初始化了一次。
实际上来说,a 已经不属于print_1()了。因为静态变量和外部变量在程序被载入内存的时候已经执行完毕。这条声明在print_1()函数中只是说明只有print_1()函数才能看到该变量。