嵌入式编码规范 6 – 函数

1、函数的命名规则。每一个函数名前缀需包含模块名,模块名为小写,与函数名区别开。
如:uartReceive(串口接收)
备注:对于非常简单的程序,可以不加模块名。

2、函数的的形参需另启一行,在后面给予说明,形参都以下划线_开头,已示与普通变量进行区分,对于没有形参为空的函数(void)括号紧跟函数后面。

/******************************************************************************
* 函数名:uartConvUartBaud
* 功 能:波特率转换
* 输 入: _ulBaud : 波特率
* 输 出:无
* 返 回:uint32- 转换后的波特率值
*/
uint32_t uartConvUartBaud(uint32_t _ulBaud)
{
	uint32_t ulBaud;

	ulBaud = ulBaud * 2; /* 计算波特率 */

	......

	return ulBaud;
}

3、一个函数仅完成一件功能。

4、函数名应准确描述函数的功能。避免使用无意义或含义不清的动词为函数命名。使用动宾词组为执行某操作的函数命名。
说明:避免用含义不清的动词如process、handle等为函数命名,因为这些动词并没有说明要具体做什么。
示例:参照如下方式命名函数。

void PrintRecord(uint32_t _RecInd);

int32 InputRecord(void);

uint8_t GetCurrentColor(void);

5、检查函数所有参数输入的有效性。
说明:如果约定由调用方检查参数输入,则应使用assert()之类的宏,来验证所有参数输入的有效性。

6、检查函数所有非参数输入的有效性,如数据文件、公共变量等。
说明:函数的输入主要有两种:一种是参数输入;另一种是全局变量、数据文件的输入,即非参数输入。函数在使用输入之前,应进行必要的检查。

7、防止将函数的参数作为工作变量。
说明:将函数的参数作为工作变量,有可能错误地改变参数内容,所以很危险。对必须改变的参数,最好先用局部变量代之,最后再将该局部变量的内容赋给该参数。

8、避免设计五个以上参数函数,不使用的参数从接口中去掉。
说明:目的减少函数间接口的复杂度,复杂的参数可以使用结构传递。

9、在调用函数填写参数时,应尽量减少没有必要的默认数据类型转换或强制数据类型转换。
说明:因为数据类型转换或多或少存在危险。

10、避免使用 BOOL 参数。
说明:原因有二,其一是BOOL参数值无意义,TURE/FALSE的含义是非常模糊的,在调用时很难知道该参数到底传达的是什么意思;其二是BOOL参数值不利于扩充。还有NULL也是一个无意义的单词。

11、函数的返回值要清楚、明了。除非必要,最好不要把与函数返回值类型不同的变量,以编译系统默认的转换方式或强制的转换方式作为返回值返回。

12、防止把没有关联的语句放到一个函数中。
说明:防止函数或过程内出现随机内聚。随机内聚是指将没有关联或关联很弱的语句放到同一个函数或过程中。随机内聚给函数或过程的维护、测试及以后的升级等造成了不便,同时也使函数或过程的功能不明确。使用随机内聚函数,常常容易出现在一种应用场合需要改进此函数,而另一种应用场合又不允许这种改进,从而陷入困境。

在编程时,经常遇到在不同函数中使用相同的代码,许多开发人员都愿把这些代码提出来,并构成一个新函数。若这些代码关联较大并且是完成一个功能的,那么这种构造是合理的,否则这种构造将产生随机内聚的函数。

示例:如下函数就是一种随机内聚。

void InitVar( void )
{
	Rect.length = 0;
	Rect.width = 0; /* 初始化矩形的长与宽 */

	Point.x = 10;
	Point.y = 10; /* 初始化“点”的坐标 */
}

矩形的长、宽与点的坐标基本没有任何关系,故以上函数是随机内聚。
应如下分为两个函数:

void InitRect( void )
{
	Rect.length = 0;
	Rect.width = 0; /* 初始化矩形的长与宽 */
}

void InitPoint( void )
{
	Point.x = 10;
	Point.y = 10; /* 初始化“点”的坐标 */
}

13、减少函数本身或函数间的递归调用。
说明:递归调用特别是函数间的递归调用(如A->B->C->A),影响程序的可理解性;递归调用一般都占用较多的系统资源(如栈空间);递归调用对程序的测试有一定影响。故除非为某些算法或功能的实现方便,应减少没必要的递归调用。

14、改进模块中函数的结构,降低函数间的耦合度,并提高函数的独立性以及代码可读性、效率和可维护性。
优化函数结构时,要遵守以下原则:
(1)能影响模块功能的实现。
(2)仔细考查模块或函数出错处理及模块的性能要求并进行完善。
(3)通过分解或合并函数来改进软件结构。
(4)考查函数的规模,过大的要进行分解。
(5)降低函数间接口的复杂度。
(6)不同层次的函数调用要有较合理的扇入、扇出。
(7)函数功能应可预测。
(8)提高函数内聚。(单一功能的函数内聚最高)
说明:对初步划分后的函数结构应进行改进、优化,使之更为合理。

嵌入式编码规范汇总:


本次归档参考安富莱编程规范,意为广大嵌入式开发者总结规范并合理使用。如有侵权,请联系删除

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值