static 是C语言中同时控制生命周期、作用域、链接属性的关键字,看似简单,却直接决定变量/函数的存储位置与访问权限,是模块化、嵌入式开发的基础。
一、static 修饰局部变量:生命周期延长
普通局部变量存于栈,函数结束即销毁;static 局部变量存于静态数据区,只初始化1次,生命周期贯穿程序全程,但作用域仍仅限函数内。
void test() {
static int num = 1; // 只初始化1次
num++;
printf("%d ", num);
}
int main() {
test(); // 2
test(); // 3
test(); // 4
return 0;
}
二、static 修饰全局变量:作用域私有化
全局变量默认全程序可见,跨文件可访问;static 全局变量仅本文件可见,外部文件无法引用,彻底避免命名冲突。
// a.c
static int g_val = 100; // 仅a.c能用
三、static 修饰函数:文件级私有
普通函数全局可调用;static 函数仅本文件内可调用,实现函数私有化,是C语言模块化的核心手段。
static void func() {
// 仅当前文件可调用
}
核心总结
- 修饰局部变量:栈 → 静态区,生命周期变长;
- 修饰全局变量/函数:全局可见 → 仅本文件可见;
- 核心价值:隔离冲突、隐藏实现、控制存储。