macro.h文件
#ifndef __W_ERRORINFO_H__
#define __W_ERRORINFO_H__
#include <stdio.h>
#define ERROR_MAP(XX) \
XX(W_ERROR_DEBUG ,"调试信息") \
XX(W_ERROR_SEGV ,"段错误信息") \
XX(W_ERROR_WARINIG ,"警告信息") \
XX(W_ERROR_OTHER ,"其它信息")
#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* error_getname(int 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* error_getinfo(int 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 unsigned char* error_table[]=
{
#define XX(_,info) info,
ERROR_MAP(XX)
#undef XX
"未知信息"
};
#define ERROR_MSG(MSG) error_table[MSG]
#endif //__W_ERRORINFO_H__
test.c文件
#include "macro.h"
int main()
{
printf("value:%d, name:%s, info:%s\n",W_ERROR_DEBUG,error_getname(W_ERROR_DEBUG),error_getinfo(W_ERROR_DEBUG));
printf("====================================================我是分割线==================================================\n");
error_print();
printf("====================================================我是分割线==================================================\n");
printf(ERROR_MSG(W_ERROR_SEGV));
}