当前位置:首页 > > 大橙子疯嵌入式


前言

这篇重点介绍一下代码编程规范的扩展要求-变量规范要求

规范要求

【规范1】一个变量只有一个功能,不能把一个变量用作多种用途

一个变量只用来表示一个特定功能,不能把一个变量作多种用途,即同一变量取值不同时,其代表的意义也不同
如,value在同一个函数中表示结果又表示次数,在阅读时增加了难度,所以这种做法是错的,正确的做法应该定义两个变量,分别表示不同含义

【规范2】结构功能单一,不要设计面面俱到的数据结构

相关的一组信息才是构成一个结构体的基础,结构的定义应该可以明确的描述一个对象,而不是一组相关性不强的数据的集合。设计结构时应力争使结构代表一种现实事务的抽象,而不是同时代表多种。结构中的各元素应代表同一事务的不同侧面,而不应把描述没有关系或关系很弱的不同事务的元素放到同一结构中

【规范 3】不用或者少用全局变量

单个文件内部可以使用static的全局变量,可以将其理解为类的私有成员变量。
全局变量应该是模块的私有数据,不能作用对外的接口使用,使用static类型定义,可以有效防止外部文件的非正常访问。
若该模块内需要定义多个全局变量,可以统一整合成一个结构体句柄,在使用或者调试时会十分方便。

【规范4】防止局部变量与全局变量同名

虽然同名没有语法错误,但是函数会优先使用局部变量,同时增加阅读难度

一般情况下,通过使用变量命名规范后,局部变量与全局变量同名基本不存在,最大前缀不同

【规范 5】变量在定义时就需要初始化

原因:若定义时没有初始化可能在一定条件下使用时出现错误,不利于后面排查问题

【规范6】严禁使用未经初始化的变量作为右值

在首次使用前初始化变量,初始化的地方离使用的地方越近越好。

【规范 7】构造仅有一个模块或函数可以修改、创建,而其余有关模块或函数只访问的全局变量,防止多个不同模块或函数都可以修改、创建同一全局变量的现象

降低全局变量耦合度

【规范8】使用面向接口编程思想,通过 API 访问数据:如果本模块的数据需要对外部模块开放 ,应提供接口函数来设置、获取,同时注意全局数据的访问互斥

避免直接暴露内部数据给外部模型使用,是防止模块间耦合最简单有效的方法。定义的接口应该有比较明确的意义,比如一个风扇管理功能模块,有自动和手动工作模式,那么设置、查询工作模块就可以定义接口为SetFanWorkMode,GetFanWorkMode;查询转速就可以定义为GetFanSpeed;风扇支持节能功能开关,可以定义EnabletFanSavePower等。

因为对外提供变量很难把控该变量被其他模块随意修改,影响系统的稳定性

【规范9】尽量减少没有必要的数据类型默认转换与强制转换

当进行数据类型强制转换时,其数据的意义、转换后的取值等都有可能发生变化,而这些细节若考虑不周,就很有可能留下隐患.
错误示例:如下赋值,多数编译器不产生告警,但值的含义还是稍有变化。

char ch; unsigned short int exam;
ch = -1;
exam = ch; // 编译器不产生告警,此时exam为0xFFFF。 

【规范10】在定义变量时将其初始化

定义的同时初始化效率更高,具体原因可自行百度;且也能防止野指针的出现,没有进行初始化程序运行时出错很难发现问题

/* 先定义再赋值效率低 */ int flag;

flag = 1; /* 定义的同时赋值效率高 */ int flag = 1;
或 int flag = GetFlag(); // 函数返回值赋值 


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭