优点
不需要改变调用的主函数,只需添加命令和相应函数。
#include "stdio.h" #include "stdlib.h" #include "string.h" static void cmd_hello(void) { hello(); } static void cmd_hi(void) { hi(); } static void cmd_exit(void) { printf("process will exit!!!\n"); exit(0); } void hello(void) { printf("console output:hello\n"); } void hi(void) { printf("console output:hi\n"); } typedef void (*callback) (void); // define command struct typedef struct cmd { char name[10]; // define command name callback func; // define callback function }cmd_t; // define command array const cmd_t cmd_tbl[] = { {"hello",cmd_hello}, {"hi",cmd_hi}, {"exit",cmd_exit}, }; // find the callback function by command name cmd_t* my_find(const char*val) { int i; for(i=0;i<sizeof(cmd_tbl)/sizeof(cmd_tbl[0]);i++) { if(!strcmp(val,cmd_tbl[i].name)) { return &cmd_tbl[i]; } } return 0; } int main() { char val[20] = {}; cmd_t *cmd_ptr; while(1) { gets(val); cmd_ptr = my_find(val); if(cmd_ptr) cmd_ptr->func(); else printf("no command\n"); } return 0; }