函式指標陣列做命令解析
阿新 • • 發佈:2018-12-27
今天偶然看到歡神的FTP程式碼,做命令解析用的是函式指標陣列來做,這樣可以省下一大堆的strcmp函式,覺得非常高階,就想記錄下來,同時組內大一同學也在做這些東西,我覺得可以借鑑一下這種處理命令的方式,看一段自己寫的測試函式吧,看完後應該就懂我再說什麼了:
程式碼中初始化一個命令字元陣列,然後在函式指標陣列中安對應位置存下對應的呼叫函式,最後對應我們自己做東西,當我們去判斷命令時就只需要一句就夠了,(說明:char *cmd 為接收到的命令字串, tip 為在函式指標陣列中對應的函式下標值。)#include <unistd.h> #include <assert.h> #include <stdio.h> #include <stdlib.h> char cmd[5][15]={"ls","search","download","uoload","update_file"}; void (*do_cmd_func[5])(const char *command); void fun0(const char *command){ printf("this is function0 with command %s\n",command); } void fun1(const char *command){ printf("this is function1 with command %s\n",command); } void fun2(const char *command){ printf("this is function2 with command %s\n",command); } void fun3(const char *command){ printf("this is function3 with command %s\n",command); } void fun4(const char *command){ printf("this is function4 with command %s\n",command); } int main(int argc, char *argv[]) { int i; do_cmd_func[0]=fun0; do_cmd_func[1]=fun1; do_cmd_func[2]=fun2; do_cmd_func[3]=fun3; do_cmd_func[4]=fun4; printf("init over ! start do_cmd_func:\n"); for(i=0;i<5;i++){ do_cmd_func[i](cmd[i]); } printf("point function_set has done !\n"); return EXIT_SUCCESS; }
do_cmd_func[tip](cmd);
這個算是一個很好的設計思路了。