static和extern关键字对变量的作用
- extern
1.在main函数前面对变量a进行提前声明。也就是让main函数知道变量a的存在就行了,至于变量a定义在哪个位置,main函数不用管。
extern int a;//声明
int main(int argc, const char * argv[]) {
a = 10;
return 0;
}
int a;//定义
//声明和定义是两码事。你不能省略定义,只留下声明,因为extern是用来声明一个已经定义过的变量。
2.可以将全局变量a声明为局部变量后再使用
void text ();
int main(int argc, const char * argv[]) {
extern int a;
a = 10;
text();
return 0;
}
int a;
void text () {
printf("%d",a);//调用的是全局变量a;
}
- static
1.修饰局部变量
:被关键字static修饰的局部变量也是静态变量。
int a;
void test() {
static int b = 0;
b++;
int c = 0;
c++;
printf("b=%d, c=%d \n", b, c);
}
int main() {
int i;
// 连续调用3次test函数
for (i = 0; i<3; i++) {
test();
}
return 0;
}
//打印的结果
/*
b=1, c=1
b=2, c=1
b=3, c=1
*/
//因为变量b是静态变量,所以它只会被创建一次,而且生命周期会延续到程序结束。因为它只会创建一次,所以代码static int b = 0 只会执行一次,下次再调用test函数时,变量b的值不会被重新初始化为0。
2.修饰全局变量
:很多时候,我们并不想让源文件中的全局变量跟其他源文件共享,相当于私有的全局变量
,那么你就得用static关键字来定义变量。总结:
如果在定义全局变量的时候加上static关键字,此时static的作用在于限制该全局变量的作用域,只能在定义该全局变量的文件中才能使用,跟其他源文件中的同名变量互不干扰
未完。。。