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