C语言:多个全局变量的开发规范 作者:马育民 • 2026-03-31 20:55 • 阅读:10004 # 介绍 **嵌入式严禁大量零散全局变量!** ```c // 禁止!!!垃圾代码 int temp; int humi; int fan_flag; int timer_count; int sample_interval; ``` **正确规范:用 结构体 把所有全局变量打包成 一个结构体变量。** # 开发规范 ### 1. 防止全局变量泛滥 - 变量多了,不知道谁改的 - 调试极难 - 容易被意外篡改导致死机 ### 2. 防止多线程冲突 结构体统一管理,方便加锁 ### 3. 方便保存到 Flash / 固件升级 直接存整个结构体,不用一个个变量存 ### 4. 代码可读性提升 10 倍 别人一看就知道: **这是一个模块的所有配置/状态** # 例子 结构体聚合全局变量 ### 1. 定义头文件 创建文件,如:`global_var.h`,内容如下: ``` #ifndef __GLOBAL_VAR_H__ #define __GLOBAL_VAR_H__ #include // 定义结构体 typedef struct { float temp; float humi; } Sht40Stat_t; // 对外接口 const Sht40Stat_t* GlobalVar_Get_Sht40Stat(void); int GlobalVar_Set_Sht40_TempHumi(float temp, float humi); int GlobalVar_Set_Sht40(const Sht40Stat_t* stat); #endif ``` 定义结构体 `Sht40Stat_t`,与之相关的所有全局变量放在结构体中 ### 2. 实现 创建文件,如:`global_var.c`,内容如下: ``` #include "global_var.h" // 唯一静态全局变量 static Sht40Stat_t g_sht40Stat; const Sht40Stat_t* GlobalVar_Get_Sht40Stat(void) { return &g_sht40Stat; } int GlobalVar_Set_Sht40_TempHumi(float temp, float humi) { g_sht40Stat.temp = temp; g_sht40Stat.humi = humi; return 0; } int GlobalVar_Set_Sht40(const Sht40Stat_t* stat) { g_sht40Stat = *stat; } ``` ## 在别的文件调用 ### 第一步:包含头文件 ```c #include "global_var.h" // 👈 必须加这一行 ``` ### 第二步:修改变量 ``` GlobalVar_Set_Sht40_TempHumi(temp,humi); ``` ```c // 1. 定义一个新配置 Sht40Stat_t new_stat = { .temp = 28.0f, .humi = 60.0f, .fan_enable = 1, .sample_ms = 1000, }; // 2. 调用设置函数 GlobalVar_Set_Sht40(&new_stat); ``` ### 第三步:读取变量 ```c // 读取配置 const AgriConfig_t *cfg = Agri_GetConfig(); // 然后就能用里面的参数 float temp = cfg->temp; uint32_t time = cfg->sample_ms; ``` # 总结 1. **禁止零散全局变量** 2. **同类变量打包成结构体** 3. **用 static 私有化全局结构体** 4. **对外只提供读/写函数接口** 原文出处:http://www.malaoshi.top/show_1GW330Tp7qlc.html