水煮 鱼@博客园

一条鱼,在沸腾的水中畅快的游来游去,现在的历练,为了将来的成长.
随笔 - 15, 文章 - 0, 评论 - 64, 引用 - 0
数据加载中……

一种简单实用的错误码构建方法

作者:水煮鱼
时间:2007-7-24 夜
版权申明:本文为水煮鱼为水煮鱼@Donews撰写,不得用于商业用途,如需摘用,请与水煮鱼联系。

当进行软件设计的时候,很多人都喜欢在函数中加入调试信息以方便对问题的定位(当然也可以使用断言,但是由于很多人对断言的使用原则把握不是很清楚,因此也造成了断言的乱用和滥用等现象)。

加入调试信息的缺点是使得代码变得非常冗余。当代码规模较小的时候,其缺点还不易察觉,但是当软件规模变得越加庞大的时候,调试信息的缺点就会暴露出来了:

1、冗余代码降低了代码的效率

2、由于每人编码风格的不一致,使得调试信息最终五花八门,降低了代码的专业性和可维护性。

3、如果是多CPU系统,调试信息会降低系统有限的通信带宽,导致整机系统通信效率的降低。

因此,本文推荐在系统设计中采用这样一种简单而有效的错误码构造方式。

包括两个部分:

首先是错误码的构造方法:

采用比特构造发,也就是通过比特位传递函数的调用关系。如果函数出现调用错误,可以通过查看返回的错误码准确定位到出现问题的函数。

具体方法如下:

/**************************************************************
    This program is to show how to design error code!!!!!
***************************************************************/

/*definition of error code*/
#define ERROR_FUNC_1      0x01           /*0000 0001*/
#define ERROR_FUNC_2      0x02           /*0000 0010*/
#define ERROR_FUNC_3      0x04           /*0000 0100*/
#define ERROR_FUNC_4      0x08           /*0000 1000*/
.........
#define ERROR_FUNC_8      0x80           /*1000 0000*/

/*the definition of function*/
ERR_CODE func_1 ()
{
    ..........

    return ERROR_FUNC_1;
}

ERR_CODE func_2 ()
{
    ERR_CODE ulRet;

    ulRet = func_1 ();

    return ERROR_FUNC_2 | ulRet;
}

ERR_CODE func_3 ()
{
    ERR_CODE ulRet;

    ulRet = func_2 ();

    return ERROR_FUNC_3 | ulRet;
}

..........

ERR_CODE func_8 ()
{
    ERR_CODE ulRet;

    ulRet = func_7 ();

    return ERROR_FUNC_8 | ulRet;
}

其第二部分主要就是考虑提供错误码解析模块。

如果总是通过查看错误码和函数的调用关系,太过繁琐。通过错误码解析模块可以对错误码进行统一管理,这样也在很大程度上减小了规范性的影响。

如果对于多CPU系统,可以将该部分工作放在主用系统上完成。这样做到了错误码的统一管理,提高了其规范性。

===============================================

我相信很多朋友在工作中都用到的上述方法,在此我仅仅是抛砖引玉。不过我想表达的意思是:在工作前确定标准是何其重要。尽管上述方法非常简单,但是在实际的工作中有多少项目能够做到?不要说整个软件的风格一致或者相似,就是一个项目的几个人的编码风格也千奇百怪。这也是为什么越是成熟的软件公司越是注重编程规范的细节。因为只要规范,才能传承,只有传承才会有积累,只有积累才会有不断的进步,只有不断的进步,才有最终的强大。

posted on 2008-02-17 18:56 水煮 鱼 阅读(1490) 评论(2)  编辑 收藏

评论

#1楼    回复  引用  查看    

这是一种常见的API级别的错误码定义方式,尤其适合C语言和DLL。

在应用程序内部,我个人认为定义一个简单、灵活的异常层次,再配合适当数量的错误码,能使程序结构更加清晰。
2008-02-17 19:40 | 保权      

#2楼 [楼主]   回复  引用  查看    

我不是做应用程序的
一直都是写的嵌入式的C和汇编
就我们公司而言,一般的人写代码的时候都是随意而行
尽管目前我们公司在项目规范性上已经做到很高了
对可维护性的轻视仍然很突出,很多时候可维护性主要还是靠自己的编码能力来决定。
2008-02-17 19:52 | 水煮 鱼      

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-02-18 09:46 编辑过
 
另存  打印