错误码设计

本文介绍了一种错误码定义及获取错误描述的方法。错误码采用统一格式A-BB-CC,其中A代表错误级别,B代表项目或模块名称,C为具体错误编号。文中提供了宏定义来生成错误码及对应的描述信息,并展示了如何通过枚举实现错误码的获取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

转载于:https://www.cnblogs.com/baigoogledu/p/7071495.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值