本文档翻译 MISRA C 2012 版的规则,以及作为代码编辑者对规则的理解和建议。本文档可作为MISRA C 2012 原始文档(英文文档)的补充,辅助理解 MISRA C 规则。译者补充的描述,建议内容会以红色标注,辅助理解的补充内容则以蓝色标注。
规则
MISRA C 规范第 7 章、第 8 章中条目的统称,本想翻译为“规则”,但在第 6 章中对其做了分类,分为了“指令”和“规则”,故不可行。其直译可以为“指导方针”、“指南”、“准则”等,这份译档中, 取“准则”作为译名,不一定准确。
声明和定义
声明一个变量只是将变量名标识符的有关信息告诉编译器,使编译器“认识”该标识符,但声明不一定引起内存的分配。而定义变量意味着给变量分配内存空间,用于存放对应类型的数据,变量名就是对相应的内存单元的命名。在 C/C++程序中,大多数情况下变量声明也就是变量定义,声明变量的同时也就完成了变量的定义,只有声明外部变量时例外。函数类似,声明只是告诉编译器有这个名称、类型的函数,而定义则是函数的真实实现。
连接/链接
分为三类,外部连接(链接)(external linkage)、内部连接(链接)(internal linkage)和无连接(链接)(no linkage)。具体描述可参阅《程序员的自我修养》一书,这里仅描述它们的特征。
外部连接(链接)(external linkage):对于变量,即无“static”修饰的全局可访问的变量;对于函数,即无“static”修饰的全局可调用的函数。它们即使没有在头文件中用“extern”做外部声明,仍然被识别为外部连接(链接)(external linkage)。内部连接(链接)(internal linkage):即由“static”修饰的全局变量和函数,它们尽可在所在文件内访问和调用,无法被全局访问/调用。
无连接(链接)(no linkage):即函数内部变量。所有函数都是有连接(链接,linkage)的。内部变量包含临时变量和静态变量两种,它们的共同特征是均无法在本函数外被访问。
在下面的描述中,将不直接描述连接/链接,而已以全局,局部为描述,以便于理解。
对象(object)
本规范的编制,具有普适性,故会出现如“对象”、“类”这些标准 C 中不提及的概念,对象在 C 语言中的直接对应是变量。当前对象不仅仅是变量,但本译文仅限考虑标准 C(准确的说是嵌入式 C),故不过多描述,我们将其当成“变量”理解即可。
上章节
返回目录
下章节