为什么嵌入式C语言编程要有编码规范

来源:互联网 发布:php hashmap的实现原理 编辑:程序博客网 时间:2024/06/08 22:36

本期和接下来几期的专题都是与嵌入式C语言编码规范相关。首先来看两段有效代码完全一样的代码(源码取自某芯片的固件库,代码查看器选用的UEStudio,视图配置为显示空格和Tab)。大家可以感受下,同样的代码,两种编码风格比较起来,你看懂代码所需要的时间哪个更短。



这里简单讲解下:

代码1的if块语句的大括号没有另起并独占一行,缩进没有统一使用空格(不同的编译器和代码阅读器对tab键的解析规则是不一样的),加上逻辑独立的if之间缺乏空行,会给不熟悉该代码的程序员造成阅读障碍。如果if里面有多层嵌套的话,代码层级关系看起来就有会更加凌乱,理解效率会更加低下。

 

言归正传,什么是代码编码规范呢?编码规范指的是从代码的正确性、稳定性、可读性等方面识别出来的在编码过程中要遵循的规则,例如代码的排版规则,注释方法,函数、变量命名规则等等。我曾经先后在三个规模比较大的公司任职,这些公司都有严格实行C语言编码规范,尤其以一加汽车行业的公司要求最为严格,除了要遵循MISRA C以外,公司还购买了专业的代码检查工具,并自定义了一系列命名规则,进行代码规范化检查,对于所有违规项都需要更正,因特殊情况无法规避的,需要逐条注明原因,否则项目无法往前推动。曾经苦逼的我,一个星期需要对1000+条违规项进行逐条检查。

 

那为什么要制定规则来规范编码过程呢?其实想想实行好的编码规范能带来哪些好处就很明确:

1.      提高代码的可读性:如果没有代码规范的规约,即便是同一个人,他在不同时期代码的写法与风格都会有差异,更不用说由多人组成的团队了。相同的命名规则,编排方法,注释原则,能大大提高程序的可读性。

2.      提高代码的正确性和健壮性:编码规范一般都会有基于准确性和安全性方面的条例,帮助程序员编写出准确性高和健壮性好的代码,例如在MISRA C中规定所有的if ... else if结构应该由else子句结束。else语句或者要执行适当的动作,或者要包含合适的注释以说明为何没有执行动作。这与switch语句中要求具有最后一个必须有default结束一致,都是为了防止程序漏了考虑特殊情况而导致非预期结果,从而引发异常。

3.      快速提高程序员的编码能力:编码规范往往都是行业内人士的经验积累,很多条例都是由“过来人”踩过的坑,吃过的亏转换而来。对于经验较少的程序员,可以通过阅读和遵守编码规则快速提高自身的编码能力,写出更加高质量的代码。

 

最后谈一谈如何看待编码规范:

1.      编码规范一旦制定就必须严格遵守,尤其是在由多个开发人员组成的团队中;

2.      编码规范并非一成不变的,需要在实际工作过程中将一些不良编码导致bug的经验提炼为新的条例;

3.      要持开放的心态看待不同的编码规范,尤其是一些代码风格方面的规定,代码如人,风格的差异很正常,要做到彼此尊重。

 

扩展阅读,百度一下均可找到:

1.      MISRA C 2012

2.      华为C/C++编码规范和范例

 

公众号刚开通使用,活跃度不高,所以无法在文章内留言。如需交流,可以联系:

QQ群:478737279(加群请注明理由)

微信号:15914137911

欢迎扫码关注本公众号,会不定期推送嵌入式软硬件设计方面的干货。


0 0
原创粉丝点击