代码示例:1.3.5 作用域与 static/extern
全部示例均标注编译命令、适用环境与实测状态;完整验证记录见《03.5-代码编译运行验证记录》。
examples/ex1-main.c · 三文件工程:static 内部函数 + 静态局部计数 + extern 共享变量
/* ex1-main.c —— 1.3.5 ex1:跨文件调用 + 定义只在唯一一处 .c */ #include <stdio.h> #include "ex1-counter.h" #include "ex1-shared.h" /* 定义(只此一处):extern 声明见 ex1-shared.h */ int global_counter = 100; int main(void) { printf("tick 1 = %d\n", tick()); printf("tick 2 = %d\n", tick()); printf("tick 3 = %d\n", tick()); printf("global_counter = %d\n", global_counter); return 0; }examples/ex2-static-local.c · static 局部变量保持值
/* ex2-static-local.c —— 1.3.5 ex2:static 局部变量保持值 */ #include <stdio.h> static int next_id(void) { /* 静态存储期:只初始化一次;每次调用在上次值基础上 +1 */ static int id = 1000; id++; return id; } int main(void) { printf("next_id: %d\n", next_id()); printf("next_id: %d\n", next_id()); printf("next_id: %d\n", next_id()); return 0; }examples/ex3-dup.h · 头文件放定义导致多重定义(diagnostic:预期链接失败)
/* ex3-dup.h —— 1.3.5 ex3(diagnostic 实验文件,勿模仿):把变量定义放进头文件是错误示范 */ int x = 1; /* 错误:这是"定义",被多个 .c 包含会产生多重定义 */