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