C 作用域规则
作用域决定标识符的可见范围;存储期决定其在内存中的生存时间;链接属性决定跨翻译单元的可见性。
1. 作用域种类
- 块作用域(block scope)
- 文件作用域(file scope)
- 函数原型作用域(function prototype scope)
- 函数作用域(labels 的作用域)
2. 示例与说明
c
static int g = 0; // 文件作用域,内部链接
void f(void) {
int x = 1; // 块作用域
{
int x = 2; // 内层 x 隐藏外层 x
(void)x;
}
(void)x;
}3. 名称隐藏与遮蔽
- 内层声明可遮蔽外层同名标识符
- 避免过度复用名称造成混淆
4. 链接属性
extern:外部链接static:内部链接
5. 存储期再回顾
- 自动(auto):进入块分配,离开释放
- 静态(static):程序开始至结束
- 动态:malloc/free
6. 实践建议
- 尽量缩小变量作用域
- 用
static限制内部实现细节的可见性 - 对外只暴露必要的头文件接口
7. 小结
清晰的作用域与链接策略可以降低耦合、避免命名冲突、提升可维护性。