本文参考:libhv源码herr.h
在项目过程中难免自定义错误码并且给出错误提示信息方便我们排查,类似VS的错误查找工具。
常规定义错误码:不建议,每次新增错误码都必须维护strerror,相对繁琐
#defind ERR_OK 1000//OK
#defind ERR_UNKNOW 1001//unknown
#defind ERR_PARAMS_INVALID 1002//params invalid
const char *strerror(int errcode)
{
switch(errcode)
{
case ERR_OK:return "OK";
case ERR_UNKNOW:return "unknown error";
case ERR_PARAMS_INVALID:return "params invalid";
default:
return "unknown error";
}
}
优雅定义错误码:推荐方法,不用维护strerror。
//定义错误码的宏,维护错误码和信息描述
#define ERR_CODE(F)\
F(1000,OK,"OK")\
F(1001,UNKNOWN,"Unknown error")\
F(1002,PARAMS_INVALID, "Params invalid")
//通过枚举定义错误码
//此时会生成错误码ERR_OK=1000,ERR_UNKNOWN=1001,ERR_PARAMS_INVALID=1002的错误码
enum eErrCode{
#define FECODE(code,name,msg) ERR_##name=code,
ERR_CODE(FECODE)
};
//返回错误信息
const char* strerror(int err_code)
{
switch (err_code)
{
#define FERRSTR(code,name,msg) case code:{return msg;}
ERR_CODE(FERRSTR);
default:
break;
}
return "";
}
错误码信息打印:
error = strerror(ERR_OK);