1 编写目的
一致且良好的代码规范,是软件项目开发高效和高质量的一个基本条件,它能够提升代码的可读性和健壮性,更进一步就是提升软件开发的效率和质量。
– 能够节省大量的阅读代码的时间,据统计,软件开发过程中,40%-70%的工作量是在首次编码完成后投入的,这些工作中就需要反复地阅读代码。
– 能够节省团队各成员间的沟通成本,沟通成本中包含了因为代码风格差而需要额外增加说明文档所多付出的资源。
– 能够在编码环节中避免一些没必要的软件bug,否则这些bug等待集成甚至发布时才发现,解决这些bug的成本将大大增加。
所以,我们需要在软件团队中践行一致且良好的代码规范。但是代码规范有很多,并不是所有规范细则都很重要,都适合,所以就从中挑选出一些基本的代码规范细则汇编。
2 术语和缩写词
缩写、术语 解释
语法:语法指用字符组合成合法语句的规则集,语法定义语言的各种要素间的形式关系。语法给出了语言中各种不同的合法的语句的结构描述,语法只关注句法结构,而不管其含义。
语义:语义指定一条合法语句的含义,语义描述了计算机执行一个程序时所表现的行为。
3 代码规范
3.1 命名规范
3.1.1命名的要求
选择有意义的名称:所有的变量、类型、文件和函数的名称都应该有意义,不要误导。名称应该如实地描述它所代表的实体。命名方案应该前后一致,以避免出现令人不快的惊奇。应确保变量的使用方法与它的名称相符。
好的名称也许是我们避免多余注释的最好办法。它们是我们在代码中获得接近自然语言的表达所拥有的最唾手可得的工具。
选择描述性的类型:
1. 如果你要定义一个永远都不改变的值,那么就强制将其定义为一个常量类型。Const
2. 如果一个变量不应当包含负值,那么就使用一种无符号类型。
3. 使用枚举来描述一组相关的值。
避免使用magic数字,应该使用命名得当的常量,或者宏常量。
3.1.2命名一般规范
1. 文件名一律小写。
2. 采用小写,除另有规定的之外(比如宏定义全部采用大写的方式)。
3. 允许中间使用 _。
4. 采用动名词结构 动词 行为 对象。
5. 合理使用缩写:全局的、经常用的,一定精简;局部的,不经常用的,一定要能说明其意义。
6. 宏定义全部采用大写的方式 宏函数一定要有括号。
7. 尽量不要在工程的设置中声明宏,以免影响程序的可读性。
8. 标准数据类型,使用bool/int8/uint8/int16/uint16/int32/uint32等,原有char/uchar/word/BYTE等全部改过来。
9. 全局变量一律以g_*描述。
10. 指针变量,特别是指向一个结构体对象的指针,需要添加 p的前缀或后缀(历史原因,有些代码采用后缀标识),比如g_p_app_info 。
3.1.3结构体
1. 结构体的作用:某一模块、某一范畴内的不同数据,组织在一起,便于集中分类,便于查找理解;因此需将模块数据结构,尽量抽象成结构体,而不是独立、分散的变量;
2. 结构体名称加后缀:_t;使用typedef封装;
3. 结构体内成员,与结构体名的关系:成员名应以简短为佳,不再以结构体名开头;
3.1.4枚举定义
1. 枚举的作用:将某一数据可能范围内的值都以成员名称的方式罗列出来,即:使用名称代替数字;因此某一类的数值,需抽象成枚举;而不是使用宏定义;如:同一类的cmd数值;
2. 枚举名称加后缀:_e;使用typedef封装;
3. 枚举内成员,与枚举类型名的关系:成员名以枚举类型名开头;
4. 枚举成员增加最小、最大值:NULL、MIN、MAX;
3.2 API接口规范
这里的API就是指我们的API机制的API,而非普通的外部函数声明。
//该接口用于显示某个LED标识,包括数字LED管
//addr : 0 ~ 25(视具体LED段码屏而定),各标识 addr 请参见led_dri