zoukankan      html  css  js  c++  java
  • 一种简单实用的错误码构建方法

    作者:水煮鱼
    时间: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系统,可以将该部分工作放在主用系统上完成。这样做到了错误码的统一管理,提高了其规范性。

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

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

  • 相关阅读:
    mysql and与or连用时遇到的坑
    mysql : 使用不等于过滤null的问题
    Bio Nio demo
    线上服务器的cpu使用达到100%了,如何排查、定位和解决该问题?
    二叉查找树、平衡二叉树、B树、B+树、聚集索引、非聚集索引
    java实现折线图统计数据
    递归构造树
    python中获取json数组中的具体数值(调用百度AI返回的json数据)
    python中使用ajax回调函数限制
    python+flask框架——前后端数据传递
  • 原文地址:https://www.cnblogs.com/shuizhuyu/p/1071457.html
Copyright © 2011-2022 走看看