局部与全局
局部变量在函数内;全局在文件作用域。生命周期与可见性不同。
1. 例子
| 1 | int counter = 0; // 全局 |
| 2 | |
| 3 | void bump(void) { |
| 4 | counter++; |
| 5 | int local = 1; // 函数结束消失 |
| 6 | } |
| 7 | |
| 8 | void show(void) { |
| 9 | printf("%d\n", counter); |
| 10 | } |
2. 对比
| 类型 | 可见性 | 生命周期 | 建议 |
|---|---|---|---|
| 局部 | 函数内 | 函数调用期间 | 优先使用 |
| 全局 | 整个文件 | 程序运行期 | 少用、接口清晰 |
| static 局部 | 函数内 | 程序运行期 | 需要保留状态时用 |
3. static 局部变量例子
| 1 | void demo(void) { |
| 2 | static int n = 0; // 只初始化一次,函数间保持 |
| 3 | n++; |
| 4 | printf("n=%d\n", n); |
| 5 | } |
| 6 | /* 连续调用 demo:n 为 1,2,3... */ |