今天在写点代码,遇到这样的代码:
#define IAX_EVENT_CONNECT 0 /* Connect a new call */
#define IAX_EVENT_ACCEPT 1 /* Accept a call */
#define IAX_EVENT_HANGUP 2 /* Hang up a call */
#define IAX_EVENT_REJECT 3 /* Rejected call */
#define IAX_EVENT_VOICE 4 /* Voice Data */
#define IAX_EVENT_DTMF 5 /* A DTMF Tone */
#define IAX_EVENT_ACCEPT 1 /* Accept a call */
#define IAX_EVENT_HANGUP 2 /* Hang up a call */
#define IAX_EVENT_REJECT 3 /* Rejected call */
#define IAX_EVENT_VOICE 4 /* Voice Data */
#define IAX_EVENT_DTMF 5 /* A DTMF Tone */
一个头文件里提供这样的,我需要写个switch来判断是这上面的消息类型中的哪一个
你来几个还挺容易打字的,这个消息类型有十几个,唉,把我搞烦了。
得想个办法来解决这个问题,看到第一行,如果能自已把这个 IAX_EVENT_CONNECT 给识别出来生成个
case IAX_EVENT_CONNECT:
break;
就能够省不少事了。
写c语言,我一般用vi,vi里面有个替换功能,还能支持正则表达式,
我们这个写成正则表达式要怎么写呢:
#define [^ \t]* .*
就是 IAX_EVENT_CONNECT可能是空格或者\t
最后还要把 IAX_EVENT_CONNECT弄成一个group,\([^ \t].*\)
最后得到命令行如下:
%s/#define \(.[^ \t]*\).*/\t\tcase \1: \r\t\t\tbreak;/g
这样就可以少敲不少键盘了,正则表达式真是个好东西啊.
代码该生成的时候还是要生成啊。