错误码与错误字符串转换 宏定义 枚举与查找

直接上例子,优雅实现

const char * p = get_msg_str(E_THIRD);

简单实现

#define CODE_MSG(XX) \
	XX(E_FIRST, "the first")	\
	XX(E_SECOND, "the second")	\
	XX(E_THIRD, "the third")	\

#define E_CODE_T(name, _)	name,
enum e_type
{
	E_E,
	CODE_MSG(E_CODE_T)
};

#define GET_MSG(name, msg) case  name: return msg;
const char* get_msg_str(e_type type)
{
	switch (type)
	{
		CODE_MSG(GET_MSG)
	}
	return "";
}

也可以稍微冗余

enum e_type
{
	E_E,
	E_FIRST, 
	E_SECOND, 
	E_THIRD, 
};

#define CODE_MSG(XX) \
	XX(E_FIRST, "the first")	\
	XX(E_SECOND, "the second")	\
	XX(E_THIRD, "the third")	\

#define GET_MSG(name, msg) case  name: return msg;
const char* get_msg_str(e_type type)
{
	switch (type)
	{
		CODE_MSG(GET_MSG)
	}
	return "";
}

灵活的实现,参考 libuv实现


#define	e__first  1
#define	e__second 2
#define	e__third 3

#define code_msg(xx) \
	xx(first, "the first")	\
	xx(second, "the second")	\
	xx(third, "the third")	\

enum e_type
{
#define xx(code, _) e_## code = e__ ## code,
	code_msg(xx)
#undef xx
};


#define get_msg(name, msg) case e_ ## name: return msg;
const char* get_msg_str(e_type type)
{
	switch (type)
	{
		code_msg(get_msg)
	}
	return "";
}
//get errcode left hand str
#define get_msg_ex(name, _) case e_ ## name: return #name;
const char* get_msg_str_ex(e_type type)
{
	switch (type)
	{
		code_msg(get_msg_ex)
	}
	return "";
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值