一个非常有技巧的错误码定义头文件,可以拿去直接用

#ifndef __ERR_DEFS_H__
#define __ERR_DEFS_H__

/*
 * err_code.h
 *
 * This is a PUBLIC header file. It defines error codes returned by
 * apis.
 */


#define ERROR_MAP(XX) \
XX(OK                                   , "正常返回") \
XX(ERR_SYS_UNINTIALIZED                 , "未初始化") \
XX(ERR_SYS_ALRDY_INTIALIZED             , "已经初始化") \
XX(ERR_INVALID_PARAMS                   , "无效参数") \
XX(ERR__NULL_PTR                        , "空指针") \
XX(ERR__MALLOC_FAIL                     , "malloc失败") \
XX(ERR_MUTEX_CREATE_FAIL                , "创建信号量失败") \
XX(ERR_MUTEX_TAKE_FAIL                  , "申请信号量失败") \
XX(ERR_MUTEX_GIVE_FAIL                  , "释放信号量失败") \
XX(ERR_INVALID_OP                       , "无效操作")

#define W_ERROR_EOF (0xff)
 
typedef enum __error_type_t
{
    #define XX(name,_)  name, 
    ERROR_MAP(XX)
    #undef XX
    W_ERROR_MAX = W_ERROR_EOF-1
}ERROR_TYPE_T;


#define ERROR_NAME_GEN(name, _) case name: return #name;
const CHAR_T* error_getName(INT32_T err) {
  switch (err) {
    ERROR_MAP(ERROR_NAME_GEN)
    default:
      return NULL;
  }
}
#undef ERROR_NAME_GEN

#define ERROR_INFO_GEN(name, info) case name: return info;
const CHAR_T* error_getInfo(INT32_T err) {
  switch (err) {
    ERROR_MAP(ERROR_INFO_GEN)
    default:
      return "未知信息";
  }
}
#undef ERROR_INFO_GEN
 
#define ERROR_PRINT_GEN(name,info) printf("value:%d, name:%s, info:%s\n",name,#name,info);
VOID error_print()
{
    ERROR_MAP(ERROR_PRINT_GEN)
}
#undef ERROR_PRINT_GEN
 
static  UCHAR_T* error_table[]=
{
    #define XX(_,info)  info,
    ERROR_MAP(XX)
    #undef XX
    "未知信息"
};
#define ERROR_MSG(MSG)  error_table[MSG]
 

#if 0 
INT32_T main()
{
    printf("value:%d, name:%s, info:%s\n",
        ERR_INVALID_OP, 
        error_getName(ERR_INVALID_OP),
        error_getInfo(ERR_INVALID_OP);
    
    error_print();
    
    printf(ERROR_MSG(ERR_INVALID_OP));

    return 0;
}
#endif

#endif


转载于:https://my.oschina.net/iamancoder/blog/652011

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值