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

#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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值