前言
标识符,包括变量名、函数名、类型名等,是编程语言中用来区分和引用程序元素的基本构造单元。良好的标识符命名实践是确保代码可读性、可维护性和可靠性的关键因素之一。本文基于MISRA-C手册进行学习和总结标识符相关规则。文末附参考文献地址。
规则 5.1(必须): 标识符(内部和外部)不应依赖于超过31个字符的意义
解释: 此规则要求内部标识符(即在文件内部定义的标识符)必须在其前31个字符内保持唯一性,以确保代码的可移植性。该规则适用于所有命名空间,包括宏名,且31字符的限制在替换前后均适用。
注意:易混淆的字符如1(数字一)与l(小写字母L)、0与O、2与Z、5与S、n与h应谨慎使用。
规则 5.2(必须): 内层作用域中的标识符不应使用外层作用域中标识符的相同名称,从而隐藏外层标识符
解释: “外层作用域”指的是具有文件作用域的标识符,而“内层作用域”指的是具有块作用域的标识符。当内层定义覆盖了外层定义时,才构成违规。
示例: 如果使用了第三方库,应在文档中列出该库的版本,确认其与MISRA-C标准的兼容性,并记录任何必要的验证测试结果。
int i; // 外层定义
{
int i; // 内层定义,隐藏了外层的i,不合规
i = 3; // 可能导致混淆,不清楚引用的是哪一个'i'
}
规则 5.3(必须): 类型定义名应当是一个唯一的标识符
解释: 此规则要求类型定义名(typedef
名称)必须在整个程序中是唯一的,不得在任何地方被重用,无论作为其他 typedef
名称还是用于任何其他目的。即使在不同的源文件中,也不允许出现相同的类型定义,即使它们的声明完全相同。当类型定义在头文件中声明,且该头文件被多个源文件包含时,不违反此规则。
示例: