跳到主要内容
🔍

代码示例: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 包含会产生多重定义 */