错误码设计

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了错误码设计相关的知识,希望对你有一定的参考价值。

1. 获取错误码描述信息

2. 获取错误码字符串表示

 

/**统一格式:A-BB-CC
    A:错误级别,如1代表系统级错误,2代表服务级错误;
    B:项目或模块名称;
    C:具体错误编号*/

/**错误代码说明
    (20502)
    2: 服务级错误(1为系统级错误)
    05: 服务模块代码
    02: 具体错误代码*/
#define UV_ERRNO_MAP(XX)                                                  \
    XX(    0, UNKNOWN,                "unknown error")                        XX(    1, OK,                     "success")                              XX(10201, SYS_EOF,                "end of file")                          XX(10202, SYS_INVALID_SOCKET,     "invalid socket fd")                    XX(10401, CLI_INVALID_PASSWORD,   "invalid password")

/** 枚举 */
#define UV_ERRNO_GEN(val, name, s) UV_##name = val,
typedef enum {
    UV_ERRNO_MAP(UV_ERRNO_GEN)
    UV_MAX_ERRORS
} uv_result_code;
#undef UV_ERRNO_GEN

#define UV_STRERROR_GEN(val, name, s) case UV_##name : return s;
/** 获取错误码描述 */
const char* uv_code_desc(uv_result_code code) {
    switch (code) {
        UV_ERRNO_MAP(UV_STRERROR_GEN)
    default:
        return "unknown error";
    }
}
#undef UV_STRERROR_GEN

#define UV_ERR_NAME_GEN(val, name, s) case UV_##name : return #name;
/** 获取错误码名称 */
const char* uv_code_name(uv_result_code code) {
    switch (code) {
        UV_ERRNO_MAP(UV_ERR_NAME_GEN)
    default:
        return "unknown name";
    }
}
#undef UV_ERR_NAME_GEN

int main(int argc, char* argv[])
{
    uv_result_code code = uv_result_code::UV_SYS_EOF;
    const char* name = uv_code_name(code);
    const char* desc = uv_code_desc(code);

    return 0;
}

 

参考:  

https://github.com/libuv/libuv/blob/v1.x/src/uv-common.c

https://www.zhihu.com/question/24091286

以上是关于错误码设计的主要内容,如果未能解决你的问题,请参考以下文章

pbootcms对接微信扫码登录代码核心片段和步骤(前后端)

添加新实体标量时实体框架 4 映射片段错误

Java 封装

Java 封装

什么是好的错误消息? 讨论一下Java系统中的错误码设计

Java 封装