static
1、块内声明的static变量在程序执行期间驻留在同一存储单元内。和每次程序离开所在块就会丢失值得自动变量auto不同,static变量会无期限地保留值
2、块内得static变量只在程序执行前进行一次初始化,而auto变量则会在每次出现时都进行初始化(当然,假设他有初始化代码)。
3、每次函数被递归调用时,它都会获得一组新的auto变量,但是如果函数含有static变量,那么此函数得全部调用都可以共享这个static变量。
4、虽然函数不应该返回指向auto变量得指针,但是函数返回指向static变量得指针是没有问题的。
5、static经常用来做信息隐藏,static修饰的变量只对内部是公开可见的,而外部是无法访问的。
extern
1、extern声明中的变量始终具有静态存储期限,变量的作用域依赖于声明的位置,如果声明在块内部,那么变量具有块作用域;否则变量具有文件作用域。
2、extern修饰的变量只是对变量进行声明,而不是定义,他只是提示编译器需要访问定义在别处的变量。变量在程序中可以有多次声明,但是只能有一次定义。