C语言宏实现枚举变量转为字符串描述
2017-01-08 08:54
691 查看
在工作中,经常需要打印错误码,错误码一般定义为枚举变量或无符号整型,但是在打印时直接打印出一个枚举变量,并不直观:
The state of system is 1.
如果能打印出一个枚举变量的字符串描述,则要清晰的多:
The state of system is busy.
本文提供一种可扩展的实现枚举变量的字符串描述的方法。
源代码如下:
The state of system is 1.
如果能打印出一个枚举变量的字符串描述,则要清晰的多:
The state of system is busy.
本文提供一种可扩展的实现枚举变量的字符串描述的方法。
源代码如下:
#include <stdio.h> #include <stdlib.h> typedef struct { unsigned id; char *desc; }MY_DESCRIBE_COMM_TYPE; #define MY_DECRIBE_DECLARE_BEGIN(type) static MY_DESCRIBE_COMM_TYPE MY_describe_desc_##type[]={ #define MY_DECRIBE_DECLARE_END {0xffff,"end"} }; #define MY_DECRIBE_ADD_DESC(id,str) {id,#str}, #define MY_DESCRIBE(type,id) get_desc_by_id(MY_describe_desc_##type,id) char * get_desc_by_id(MY_DESCRIBE_COMM_TYPE *desc,unsigned id) { int i=0; static char no_match[10]={0}; while(desc[i].id!=0xffff) { if(desc[i].id==id) return desc[i].desc; i++; } return "can't find the id"; } typedef enum { apple, pear, banana, }fruit; typedef enum { error_reason1, error_reason2, error_reason3 }error_reason; MY_DECRIBE_DECLARE_BEGIN(error_reason) MY_DECRIBE_ADD_DESC(error_reason1,磁盘空间不够) #注意这里的字符串描述不用加 "" MY_DECRIBE_ADD_DESC(error_reason2,操作太频繁) MY_DECRIBE_ADD_DESC(error_reason3,系统繁忙) MY_DECRIBE_DECLARE_END MY_DECRIBE_DECLARE_BEGIN(fruit) MY_DECRIBE_ADD_DESC(apple,apple) MY_DECRIBE_ADD_DESC(pear,pear) MY_DECRIBE_ADD_DESC(banana,banana) MY_DECRIBE_DECLARE_END int main() { int a=1; printf("%s\n",MY_DESCRIBE(fruit,apple)); printf("%s\n",MY_DESCRIBE(error_reason,error_reason2)); printf("%s\n",MY_DESCRIBE(error_reason,5)); return 0; }编译运行:
$ gcc decribe.c jie@jix:~/code/ccode$ a.out apple 操作太频繁 can't find the id当新加入一个枚举变量时,只需要添加一组宏就可以轻易实现枚举变量的字符串描述。
相关文章推荐
- [转]用反射+特性列出所有的枚举变量及其描述信息,绑定到DropDownList上。
- 要求:不申请变量和空间反转字符串,用一个函数实现。VIA笔试题
- C# 字符串转为变量名
- C#里面中将字符串转为变量名
- 不使用其他变量实现字符串倒序拷贝
- 用反射+特性列出所有的枚举变量及其描述信息,绑定到DropDownList上。
- C#里面中将字符串转为变量名
- C++ 把枚举变量的名称,直接当字符串使用方法 字符串化符号 #
- 使用全局哈希表实现字符串变量的多国语言
- 根据枚举值取得描述和枚举定义字符串
- 不用库函数和其它变量实现字符串反转...
- 【按键精灵】不同字符类型组成的字符串实现变量
- 不使用任何中间变量,实现字符串反转
- JS 实现 数字转为带有逗号的字符串
- C#里面中将字符串转为变量名
- 引用为参数实现两个字符串变量的交换
- C#里面中将字符串转为变量名
- C#里面中将字符串转为变量名
- 【C#基础知识】之常量、变量、枚举、字符串、转义符、运算符及表达式、try...catch等简单介绍
- C#里面中将字符串转为变量名