去看看书 C Primer Plus 第十二章,看完你就全明白了。。。
还是建议你去看书,下面说的不一定表达得你能看得懂。
static有两种情况
1.具有内部链接的静态。。。静态存储时期,内部链接,文件作用域。
这种方式定义的变量位于所有函数之外,
如:#include <stdio.h>
static int number; //这种方式定义的变量number能被本文件内的任何函数使用。其他文件中的函数不可使用。
int main(void)
{……}
2.具有空链接的静态。。。静态存储时期,空链接,代码块作用域。
这种方式定义的变量位于函数代码块内部,
如:#include<stdio.h>
void fun(int ...);//fun函数原型
int main(void)
{
static int n; //只在本main()函数内可见,对其他函数(如fun)不可见。
……
}
void fun(int ...)
//fun函数定义
{
static char ch; //仅仅本函数fun()内可见,对其他函数(如main)不可见
……
}
再来说说上面的三个名词,存储时期,链接,作用域
作用域:
文件作用域:从定义该变量所在处到该变量所在文件结尾处。
代码块作用域:在代码块中定义的变量具有代码块作用域,(函数体,函数内部的复合语句都是代码块)
存储时期 分一下两种:
静态存储时期,是指一个变量在程序执行时期一直存在,直到程序结束。
动态存储时期,是指程序在执行包含一个变量的代码块时,将会为这个变量分配内存,当程序退出这个代码块时,将回收给它分配的内存。
链接:内部链接,空链接,外部链接
空链接: 代码块或者函数原型中的变量具有空链接,意思是他们只能为他们所在的代码块或者函数原型所使用,其他地方不能使用。
内部链接,外部链接是相对文件作用域来说的。
内部链接,是该变量只能被文件内部的函数使用。
外部链接,是该变量可以被其他文件中的函数使用。(如:做一个project时,会有很多文件,main.c
file1.c file2.c)