赞
踩
代码编写规则应该在建立一个工程项目之前,应该贯穿整个项目的始终,以保证代码的一致性。采用标准的代码编写惯例,可以大大简化项目的维护负担。采用一种好的风格,以达到以下目的:可移植性、连贯、整洁、易于维护、易于理解、简洁。
制定标准的基本目的是加强代码的可维护性。也就是说代码必须易于阅读、易于理解、易于测试、易于移植。保持代码的简单清晰,不要在语言中使用晦涩难懂的表达,直接表明你的思想。保持一致性,尽可能使用同样的规则,避免使用复杂语句,一个语句若有太多的决策点将会使代码难于理解,尤其是对于测试。一旦修改已存在的代码,就要随时更新相关文档。
1. 程序块缩进
程序块要采用缩进风格编写,缩进的空格数为4个。在编码之前对相关IDE进行设置,如若没有缩进设置,需要在编写完代码后使用相关工具格式化代码。
2. 代码群落加空格
相对独立的程序块之间、变量说明之后必须加空行。
不符合规范——
- void *th_func(void *arg)
- {
- int specific = (int)(int *)arg;
- for (int i = 0; i <= specific; i++)
- {
- printf(“%lx run %d m\n”, pthread_self(), i);
- int time = (int)(drand48() * 10000);
- usleep(time);
- }
- return (void *)0;
- }
符合规范——
- void *th_func(void *arg)
- {
- int specific = (int)(int *)arg;
-
- for (int i = 0; i <= specific; i++)
- {
- printf(“%lx run %d m\n”, pthread_self(), i);
-
- int time = (int)(drand48() * 10000);
- usleep(time);
- }
-
- return (void *)0;
- }
3. 一行不要超过80列
较长的语句(>80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。
循环、判断等语句中若有较长的表达式或语句,则要进行适当的划分,长表达式要在低优先级操作符处分新行,操作符放在新行之首。
若函数或过程中的参数较长,则要进行适当的划分。
不允许把多个短语句写在一行中,即一行只写一条语句。
4. 流程控制语句必须用大括号包含起来
if、for、do、while、case、switch、default等语句自占一行,且if、for、do、while等语句的执行语句无论多少行都要加大括号{}。
5. 操作符
在两个以上的关键字、变量、常量进行对等操作时。它们之间的操作符之前、之后或者前后都要加空格;进行非对等操作时,如果关系密切的立即操作符,后不应加空格。
逗号只在后面加空格——
int a, b, c;
比较操作符、赋值操作符、算术操作符、逻辑操作符、位域操作符等双目操作符前后都要加空格——
- if (a == n)
- a = b + c;
- a *= 2;
- a = b ^ 2;
- pid = p->pid;
单目操作符前后不加空格——
- *p = &q;
- flag = !isEmpty;
- ++i;
- j++;
if、for、while、switch等与后面的括号间应加空格,使if等关键字更为突出、明显——
if (a >= b && c > d)
6. 函数排版
相似的模板、相似的代码顺序、相似的函数排版靠近。
7. 头文件包含次序
头文件include从抽象到具体,次序:C标准库→C++标准库→OS相关→第三方库→工程头文件。
注释的原则是有助于对程序的阅读理解以及提供二次开发所需文档,注释标准参考Doxygen代码注释规范。遵循原则为,说明性文件、函数接口必须充分注释说明。全局变量需要说明功能及取值范围,需要自行处理资料函数需要加上使用警告信息。
不要使用注释来屏蔽代码。
关于函数和局部变量的注释,当代码已经可自注释,不用添加多余的注释。
标识符的命名要清晰明了,有明确含义,同时使用完整的单词或大家基本可以理解的缩写,避免使人产生误解。命名中若有使用特殊约定或缩写,则要有注释说明。整个工程自始自终的命名风格保持一致,不可来回变化。
1. 对于变量名,禁止取单个字符(如i、j、k……),建议除了要有具体含义外,还能表明其变量类型、数据类型等,但i、j、k作局部循环变量是允许的。
建议命名如下:
<数据类型>[模块名]<变量作用域><变量数据类型><变量类型><变量名>
- /* 全局变量 */
- int comm_giv_width;
- char *comm_gcp_width;
- const int comm_gic_max;
-
- /* 局部变量 */
- int liv_width;
- char *lcp_width;
- const int lic_max = 10;
-
- /* 静态变量 */
- static int lisv_width = 10;
2. 函数
全局函数,以模块名称为前缀,单词间首字母大写,例如void CommInit();头文件中声明必须包含extern关键字。
局部函数,以模块名称与下划线为前缀,单词间首字母大写;需在源文件中做前置声明。
3. 宏
以模块名称为前缀,单词间使用下划线隔开,单词字母为全大写。
4. 全局常量
以模块名称为前缀,单词间使用下划线隔开,单词字母为全大写,除了编译开关/头文件等特殊应用,应避免使用下划线开始和结尾的定义。
大模块之间以文件夹隔开,以功能命名,源文件与头文件一一对应。
1. 算法优先级
注意运算符的优先级,并用括号明确表达式的操作顺序,避免使用默认优先级。防止阅读程序时产生误解,防止因默认优先级与设计思想不符而导致程序错误。
2. 使用有意义的标识代替不易理解的数字
避免使用不易理解的数字,用有意义的标识来替代。
3. 少用技巧性很高的语句
不要使用难懂的技巧性很高的语句,除非很有必要时。高技巧语句不等于高效率的程序,实际上程序的效率关键在于算法。
错误示例——
- *stat_poi++ += 1;
-
- *++stat_poi += 1;
正确示例——
- *stat_poi += 1;
- stat_poi++;
-
- ++stat_poi;
- *stat_poi += 1;
1. 变量与结构
2. 函数与过程
1. 不能影响函数功能的实现;
2. 仔细考查模块或函数出错处理及模块的性能要求并进行完善;
3. 通过分解或合并函数来改进软件结构;
4. 考查函数的规模,过大的要进行分解;
5. 降低函数间接口的复杂度;
6. 不同层次的函数调用要有较合理的扇入、扇出;
7. 函数功能应可预测;
8. 提高函数内聚。
3. 可测性
4. 程序效率
5. 质量保证
1. 正确性,指程序要实现设计要求的功能;
2. 稳定性、安全性,指程序稳定、安全、可靠;
3. 可测试性,指程序要具有良好的可测试性;
4. 规范/可读性,指程序书写风格、命名规则等要符合规范;
5. 全局效率,指软件系统的整体效率;
6. 局部效率,指某个模块/子模块/函数的本身效率;
7. 个人表达方式/个人方便性,指个人编程习惯。
1. 充分了解应用接口、使用环境及使用时注意事项;
2. 不能过分相信其正确性;
3. 除非必要,不要使用不熟悉的第三方工具包与空间。
6. 代码编辑、编译、审查
7. 代码测试、维护
8. 宏
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。