软件编程规范(7)

2019-09-01 12:20

软件编程规范

back_sum = sum; /* backup sum */

建议7-2:对模块中函数的划分及组织方式进行分析、优化,改进模块中函数的组织结构,提高程序效率。

说明:软件系统的效率主要与算法、处理任务方式、系统功能及函数结构有很大关系,仅在代码上下功夫一般不能解决根本问题。

建议7-3:避免循环体内含判断语句,应将循环语句置于判断语句的代码块之中。

说明:目的是减少判断次数。循环体中的判断语句是否可以移到循环体外,要视程序的具体情况而言,一般情况,与循环变量无关的判断语句可以移到循环体外,而有关的则不可以。

示例:如下代码效率稍低。

for (ind = 0; ind < MAX_RECT_NUMBER; ind++) {

if (data_type == RECT_AREA) {

area_sum += rect_area[ind]; } else {

rect_length_sum += rect[ind].length; rect_width_sum += rect[ind].width; } }

因为判断语句与循环变量无关,故可如下改进,以减少判断次数。 if (data_type == RECT_AREA) {

for (ind = 0; ind < MAX_RECT_NUMBER; ind++) {

area_sum += rect_area[ind]; } } else {

for (ind = 0; ind < MAX_RECT_NUMBER; ind++)

软件编程规范

{

rect_length_sum += rect[ind].length; rect_width_sum += rect[ind].width; } }

建议7-4:在逻辑清楚且不影响可读性的情况下,代码越少越好

说明:写程序不是以行数的多少来判断一个人的工作效率,代码不是越多越好。

规则7-4:尽量使用标准库函数,不要“发明”已经存在的库函数“

建议7-5:要尽量重用已有的代码,直接调用已有的API

说明:如果原有的代码质量比较好,尽量复用它。但是不要修补很差劲的代码,应当重新编写。

软件编程规范

第八章质量保证

规则8-1:只引用属于自己的存贮空间。

说明:若模块封装的较好,那么一般不会发生非法引用他人的空间。 规则8-2:防止引用已经释放的内存空间。

说明:在实际编程过程中,稍不留心就会出现在一个模块中释放了某个内存块(如C语言指针),而另一模块在随后的某个时刻又使用了它。

规则8-3:过程/函数中动态分配的资源(包括内存、文件等),在过程/函数退出之前要释放。 示例:以下例子将造成内存泄露 :

void Func(void) {

char *p = (char *) malloc(128); ?? //do something return ; }

建议8-1:充分理解new/delete,malloc/free 等指针相关的函数的意义,对指针操作时需小心翼翼

示例:

1. 内存被释放了,并不表示指针会消亡或者成了NULL指针

char *p = (char *) malloc(100); strcpy(p, “hello”); free(p); …… //do something

if (p != NULL) {

软件编程规范

?? //These code will be executed ? }

p 没有成为NULL 指针,if 中间的代码被错误执行了。

2. new 与delete 要“步调一致”

void Func() {

Object *pObjects=new Object[10] ; ?? // do something delete pObjects ; }

申请了10 个Object空间,但只释放了1 个,造成内存泄露。正确的写法是: delete []pObjects ;

规则8-4:防止内存操作越界。

说明:内存操作主要是指对数组、指针、内存地址等的操作。内存操作越界是软件系统主要错误之一,后果往往非常严重,所以当我们进行这些操作时一定要仔细小心。

示例:假设某软件系统最多可由10个用户同时使用,用户号为1-10,那么如下程序存在问题。

#define MAX_USR_NUM 10

unsigned char usr_login_flg[MAX_USR_NUM]= \

void set_usr_login_flg( unsigned char usr_no ) {

if (!usr_login_flg[usr_no]) {

usr_login_flg[usr_no]= TRUE; } }

当usr_no为10时,将使用usr_login_flg越界。可采用如下方式解决。 void set_usr_login_flg( unsigned char usr_no )

软件编程规范

{

if (!usr_login_flg[usr_no - 1]) {

usr_login_flg[usr_no - 1]= TRUE; } }

建议8-1:要时刻注意易混淆的操作符。当编完程序后,应从头至尾检查一遍这些操作符,以防止拼写错误。

说明:形式相近的操作符最容易引起误用,如C/C++中的“=”与“==”、“|”与“||”、“&”与“&&”等,若拼写错了,编译器不一定能够检查出来。

示例:如把“&”写成“&&”,或反之。

ret_flg = (pmsg->ret_flg & RETURN_MASK); 被写为:

ret_flg = (pmsg->ret_flg && RETURN_MASK);

rpt_flg = (VALID_TASK_NO( taskno ) && DATA_NOT_ZERO( stat_data )); 被写为:

rpt_flg = (VALID_TASK_NO( taskno ) & DATA_NOT_ZERO( stat_data ));

建议8-2:条件表达式要把常量写在前面

说明:习惯写 if (MAX_COUNT == nIndex) 就不会发生 if (nIndex = MAX_COUNT)的错误。

建议8-3:有可能的话,if语句尽量加上else分支,对没有else分支的语句要小心对待;switch语句必须有default分支。 规则8-2:尽量少用goto语句。 说明:

1. goto语句会破坏程序的结构性,所以除非确实需要,最好不使用goto语句。 2. 使用goto 语句时,不能往回跳 3. 尽量不要用多于一个的goto语句标记

规则8-3:不使用与硬件或操作系统关系很大的语句,而使用建议的标准语句,以提高软件的


软件编程规范(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:工程热力学课后作业答案(第七章)第五版

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: