【08】单片机变量命名规范指南
(基于单片机开发实践,适用于 C/C++ 语言)
📌 核心原则
1️⃣ 清晰性:通过前缀、后缀、大小写区分变量类型、作用域、数据宽度等。
2️⃣ 一致性:同一项目内规则统一,避免混用不同命名风格。
3️⃣ 可读性:命名需反映变量用途,避免单字母(除循环变量)。
📝 1. 普通变量命名规范
🔹 类型前缀
前缀 | 含义 | 示例 |
---|
uint8_t | 无符号8位局部变量 | uint8_tData |
uint16_t | 无符号16位局部变量 | uint16_tCount |
uint32_t | 无符号32位局部变量 | uint32_tTime |
🔹 作用域标识
前缀 | 含义 | 示例 |
---|
无前缀 | 局部变量(默认) | uint8_tTemp |
G | 全局变量 | Guint8_tStatus |
ES | 全局静态变量 | ESuint16_tCounter |
S | 局部静态变量 | Suint32_tTimer |
📝 2. 常量命名规范
🔹 常量前缀
前缀 | 含义 | 示例 |
---|
C | 所有常量(全局/局部) | Cuint8_tMaxValue = 255 |
C | 结合类型前缀(如 Cuint8_t , Cuint16_t ) | const unsigned int Cuint16_tLimit = 65535; |
📝 3. 循环变量命名规范
📝 4. 数组命名规范
🔹 用途后缀
后缀 | 用途 | 示例 |
---|
Buffer | 普通数据缓冲区 | Guint8_tDataBuffer[10] |
String | 字符串数组 | Guint8_tMessageString[50] |
Table | 查找表/映射表 | const Cuint8_tLookupTable[] = {0x3F, ...}; |
Message | 存储结构化信息的数组 | uint8_tConfigMessage[16] |
📝 5. 指针命名规范
🔹 指针前缀
前缀 | 含义 | 示例 |
---|
p | 指针变量 | unsigned char *pGuint8_tData; |
pC | 常量指针(指向常量) | const unsigned int *pCuint16_tValue; |
🔹 作用域与类型
前缀组合 | 含义 | 示例 |
---|
pGuint8_t | 全局8位变量指针 | unsigned char *pGuint8_tArray; |
pSuint16_t | 局部静态16位变量指针 | static uint16_t *pSuint16_tPtr; |
📝 6. 结构体命名规范
🔹 结构体前缀
前缀 | 含义 | 示例 |
---|
t | 结构体变量/指针 | struct StructData tConfig; |
Gt | 全局结构体变量 | GtSensorData; |
St | 局部静态结构体变量 | static struct Data StTemp; |
pt | 结构体指针 | struct Struct *ptData; |
📝 7. 宏常量命名规范
📝 8. 通用命名规则
🔹 单词分隔
- 驼峰式命名:多个单词首字母大写,如
uint8_tGetFileLength
。 - 下划线分隔:专业术语或难以断句的单词间用
_
,如 Guint8_tESD_Flag
。
🔹 禁用规则
- 避免单字母命名(除循环变量)。
- 避免缩写(如
cnt
→ count
)。
🌟 总结
本规范通过 前缀+后缀+大小写 的组合,实现以下目标:
1️⃣ 类型可见:uint8_t/uint16_t/uint32_t
明确数据宽度。
2️⃣ 作用域清晰:G/ES/S
区分全局、静态变量。
3️⃣ 用途明确:Buffer/Table/String
标识数组用途。
4️⃣ 可读性优先:宏常量全大写,结构体前缀统一。
实践建议:
- 新项目初期严格遵循规范,后期根据需求微调。
- 单片机开发中需特别注意
b/h/l
类型修饰符(如 Keil C51)。 - 代码注释需与命名规范互补,避免过度依赖注释。
💡 终极目标:让代码成为“自文档”,无需额外说明即可理解变量用途与约束。