c语言中static关键字
static关键字
基本介绍:static关键字在c语言中比较常用,使用恰当能够大大提高程序的模块化特性,有利于扩展和维护。
局部变量使用static修饰
(1)局部变量被static修饰后,我们称为静态局部变量。
(2)对应静态局部变量在声明时未赋初值,编译器也会把它初始化为0。
static定义
(3)静态局部变量存储于进程的静态存储区(全局性质),只会被初始一次,即使函数返回,它的值也会保持不变。
#include<stdio.h>
void f1(){
static int n = 10;//第2次调用不会在运行
n++;
printf("%d\n",n);
}
void main(){
f1();
f1();
}
全局变量使用static修饰
(1)普通全局变量对整个工程可见,其他文件可以使用 extern 外部声明后直接使用。也就是说其他文件不能再定义一个与其相同名字的变量了(否则编译器会认为它们是同一个变量),静态全局变量仅对当前文件可见,其他文件不可访问,其他文件可以定义与其同名的变量,两者互不影响。
(2)定义不需要与其他文件共享的全局变量时,加上 static 关键字能够有效地降低程序模块之间的耦合,避免不同文件同名变量的冲突,且不会误使用。
案例1:在 static01 里面调用 static02 里面的全局变量num1。
案例2:在 static01 里面调用 static02 里面的静态变量num2。
错误原因:静态全局变量仅对当前文件(static02.c)可见,其他文件不可访问。
函数使用static修饰
(1)函数的使用方式与全局变量类似,在函数的返回类型前加上static,就是静态函数。
(2)非静态函数可以在另一个文件中通过extern引用。
(3)静态函数只能在声明它的文件中可见,其他文件不能引用该函数[案例]4)不同的文件可以使用相同名字的静态函数,互不影响。
在fun02中引用fun01里面的函数fun1
#include<stdio.h>
void fun1(){//普通函数
printf("hello from fun1.\n");
}
static void fun2(){//静态函数
printf("hello from fun2.\n");
}
#include<stdio.h>
extern void fun1();
void main(){
fun1();
}