构建 设置- 命令库——让命令调用更简单

来源:互联网 发布:新概念英语网络课程 编辑:程序博客网 时间:2024/06/10 12:26

在写C代码的时候,经常遇到根据某个命令然后执行某个函数,(命令和设置一对一),当命令和设置比较少时我们可以使用 if - else if - else 。。。没毛病!
例如:

if (strncmp(msg_mcp.dat_buf, "SET-XXX-NET", 11) == 0) {    cmd_set_net();    } else if (strncmp(msg_mcp.dat_buf, "SET-XXX-MOD", 11) == 0) {    cmd_set_mod();   } else if (strncmp(msg_mcp.dat_buf, "SET-XXX-STA", 11) == 0) {    cmd_set_sta();   }

但是如果命令/函数一旦特别多(超过6、7个),这个if - else if - else就显得很low了;这个时候就要采用一种巧妙的方式 - 构建 设置-命令库 来处理;
例如:

#define Set_Head            12    //命令最长12个byte#define CMD_SET_MAX_NUMBER  6     //最多有6条命令//设置-命令库的类型定义typedef struct{        unsigned char cmd[Set_Head];        int (*cmd_fun)();         //这个函数的定义根据需要改变}SET_CMD_FUN;//命令函数的声明(定义)int  cmd_set_lev(void);int  cmd_set_typ(void);int  cmd_set_mod(void);int  cmd_set_prr(void);。。。//构建一个设置-命令库,让它们一一对应SET_CMD_FUN set_cmd_fun[CMD_SET_MAX_NUMBER] = {                              {"SET-OUT-NET:",  cmd_set_lev},                    {"SET-OUT-MOD:",  cmd_set_typ},                    {"SET-OUT-STA:",  cmd_set_mod},                    {"SET-OUT-PRR:",  cmd_set_prr},                    。。。                    };//利用for循环来查询/调用这个设置-命令库for(i = 0; i < CMD_SET_MAX_NUMBER; i++){    if(strncmp((const char *)set_cmd_fun[i].cmd,\        (const char *)set_cmd.cmd, Set_Head) == 0)    {        set_cmd_fun[i].cmd_fun();        break;    }}