static为静态变量。
static变量若声明在所有函数之外,则该变量的作用域为当前文件,其他文件不可访问该变量。
static变量若声明在函数之内,该变量的作用域在函数之内。除该函数以外,其他的函数不能访问该变量。且函数的结束不会使变量被释放,下次重启该函数的时候,此变量的值仍然被记忆。
让我们看下面这个例子。
#include <stdio.h>
void sta_func(){
static int i=0;
printf("%d\n",i);
i++;
}
void func(){
int i=0;
printf("%d\n",i);
i++;
}
int main(void){
sta_func();
sta_func();
func();
func();
return 0;
}
最后输出的结果为:
0
1
0
0
很明显,sta_func函数中的i变量,即使在函数结束后,仍然没有被释放。在第二次重启的时候,仍旧启用的是之前的旧值。而func函数却不同,在函数结束后,i的值就已经被释放。
extern为全局变量。如果一个变量声明为extern变量,则所有文件都可以访问该变量并且修改。
如果extern变量和static变量一起定义则会报重复定义的error。
网友评论