ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

static全局变量 vs 普通全局变量

2026/10/7 11:55:29 拓冰建站 浏览量
static全局变量 vs 普通全局变量 static全局变量 vs 普通全局变量1. 作用域最核心区别- 普通全局变量作用域是整个工程。在A.c定义其他 .c 文件可以用 extern 声明跨文件访问这个变量。- static全局变量作用域仅限当前这个.c源文件其他源文件无法访问extern也拿不到。static 修饰全局变量本质是限制作用域为本文件不导出符号。2. 存储位置✅ 两者完全一样都存放在静态存储区全局数据段不是栈。程序启动时分配内存程序结束才释放生命周期都是整个程序运行周期。3. 初始化- 如果没有手动初始化两者默认自动初始化为0。- 只初始化一次在main函数执行之前完成。4. 多文件同名冲突- 普通全局变量多个 .c 定义同名全局变量 → 链接报错重复定义- static全局变量每个文件各自的static全局变量同名互不干扰独立变量不会冲突。5. 一句话总结考点全局变量加static生命周期不变仅把作用域缩小到当前源文件不能跨文件引用。代码示例c// file1.cint g_a; //普通全局变量别的文件extern可以访问static int g_b; //static全局变量仅file1.c内部可用// file2.cextern int g_a; //OK可以拿到g_aextern int g_b; //❌ 编译/链接报错g_b对外部不可见拓展对比顺带区分 static局部变量static局部变量作用域仍在函数内但是生命周期变成全局静态区只初始化一次。