目录
一、命名总体要求
- Rule 5.1:标识符长度 ≤ 31 个字符(前 31 字符内必须唯一)
- Rule 5.2:同一作用域中,名称不得仅以大小写区分
- Rule 5.3:不同作用域的相似名称应避免混淆
- Rule 5.4:宏名不能与变量、函数或类型名冲突
- Rule 5.5:外部标识符(全局)在整个工程中必须唯一
- Rule 5.6:禁止使用与标准库同名的标识符
- Rule 5.7:命名应反映作用域(如
g_,s_前缀) - Directive 4.1:全项目需使用一致的命名约定
二、命名风格总览
| 类型 | 前缀 | 风格 | 示例 | 说明 |
|---|---|---|---|---|
| 宏常量 | 无或模块前缀 | 全大写 + 下划线 | MAX_TEMP, MOTOR_SPEED_LIMIT |
一眼识别为常量 |
| 全局变量 | g_ |
小写 + 下划线 | g_sensor_value |
作用域:全局 |
| 文件内静态变量 | s_ |
小写 + 下划线 | s_error_count |
作用域:文件内 |
| 局部变量 | 无 | 小写 + 下划线 | temp_value, index_count |
作用域:函数内 |
| 函数名 | 模块前缀 + 动词_名词 | 小写 + 下划线 | sensor_read_data() |
命名体现行为 |
| 类型(typedef) | 模块前缀 + 首字母大写 + _t 后缀 |
PascalCase + _t |
SensorData_t, MotorState_t |
便于识别自定义类型 |
| 枚举成员 | 模块前缀 + 全大写 | 全大写 + 下划线 | SENSOR_OK, SENSOR_ERROR |
避免跨模块冲突 |
三、命名规范示例代码
|
|
四、命名规范检查清单(Checklist)
- 所有标识符长度 ≤ 31 个字符(Rule 5.1)
- 不存在仅大小写不同的标识符(Rule 5.2)
- 不存在跨作用域的相似命名(Rule 5.3)
- 宏名与其他标识符无重名(Rule 5.4)
- 所有全局标识符在项目中唯一(Rule 5.5)
- 不与标准库符号冲突(Rule 5.6)
- 前缀区分作用域(Rule 5.7)
- 全项目命名风格一致(Directive 4.1)
五、命名风格推荐
推荐使用 小写 + 下划线(snake_case) 为主风格, 结合前缀区分作用域与类型,命名应反映语义。
例如:
|
|
六、总结
MISRA C 不强制具体命名风格,但要求:
- 唯一、无歧义、可读;
- 作用域区分明显;
- 全项目一致;
- 宏、类型、变量、函数命名规则清晰。
遵守以上规范有助于:
- 降低审查警告;
- 减少命名冲突;
- 提高团队协作与代码可维护性。