高级应用——X"/>
宏的高级应用——X
使用switch-case/if-else
对于条件/分支处理的程序设计,我们惯性地会选择switch-case
或者if-else
,这也是C语言老师当初教的。以下,我们用一个播放器的例子来说明,要实现的功能如下:
- 收到用户操作播放器命令请求,如“播放”、“暂停”等,程序要对命令作区分;
- 针对不同的命令请求,作相应的处理;
- 输出必要的辅助信息。
首先,将命令定义成enum
类型:
enum
{CMD_PLAY, CMD_PAUSE,CMD_STOP,CMD_PLAY_NEXT,CMD_PLAY_PREV,
};
然后,用switch-case
的分支处理:
switch(cmd)
{case CMD_PLAY:// handle play commandbreak;case CMD_PAUSE:// handle pause commandbreak;case CMD_STOP:// handle stop commandbreak;case CMD_PLAY_NEXT:// handle play next commandbreak;case CMD_PLAY_PREV:// handle play previous commandbreak;default:break;
}
实际上,这也没什么毛病。但是,时间长了,需求不断变更,程序不断迭代,这个switch-case
会变得非常冗长而很难维护。你不相信?我曾经见到过>1000行的类似这样的代码。如果让你接手维护这样的代码,你内心会不会狂奔着万千草泥马?
但是,我不敢更改这个祖传的switch-case
啊,那么小心翼翼地将这些命令处理封装成函数。像这样:
#define FUNC_IN() printf("enter %s \r\n", __FUNCTION__)void func_cmd_play(void* p)
{FUNC_IN();
}void func_cmd_pause(void* p)
{FUNC_IN();
}void func_cmd_stop(void* p)
更多推荐
宏的高级应用——X
发布评论