这年头好像继续做C语言的人不多了,年轻人大多去互联网和移动应用。确实,那两个领域现在来钱快,且总是供不应求。就说刚刚在一个旧同事的微信群里,有人刚放出自己有团队可以做App几分钟,哇塞,好几个人说有项目,要求加好友私聊。我也想过转行,可惜人老珠黄,没有互联网或是应用团队愿意接收。估计再过些年,C程序世界里就只有我这样的小老头们继续自娱自乐了,羡慕死年轻人了!
平常工作中,经常要做一些打印,或是日志。而这里面,enum类型的数据就很多,如果只是打印出它的整数值,显然会让测试人员很恼火,鬼知道那数字说的是什么。就算你给他个文档对着看,也丝毫不能得到原谅。最后,都得乖乖的把这个enum对应的名字打印出来才能平息。
今天说的这个,就是帮忙搞定这个转换问题的。
比如,有这么个example.h文件:
enum InfoStateE{ eInfoStateIdle, eInfoStateIniting, eInfoStateInited, eInfoStateReady, eInfoStateActive, eInfoStateStandby, eInfoStateRelease, };
我们需要个函数,把enum值翻译成字符串;另外也要个函数,能查找字符串对应的enum值;可以提供名字的一部分。p_enum.pl就是做这个的,只需要执行:
perl p_enum.pl example.h -o:example_map
p_enum.pl接受目录,通配符,或是多个文件。-o:example_map是指定输出的文件名。这里我们得到了example_map.h和example_map.c两个文件:
/* FILE: example_map.h This file was created at Fri Dec 11 16:40:56 CST 2015 Auto-generated source. Don't change it manually. Contact with hhao020@gmail.com for bug reporting and supporting. */ #ifndef EXAMPLE_MAP #define EXAMPLE_MAP #ifdef __cplusplus extern "C" { #endif #include "zType_Def.h" extern const char* InfoStateE2Name(dword_t e); extern dword_t InfoStateE2Value(char* name, int bAppro); extern int InfoStateEMapShow(); #ifdef __cplusplus } #endif #endif /*EXAMPLE_MAP*/