1. 程式人生 > >函式指標陣列做命令解析

函式指標陣列做命令解析

  今天偶然看到歡神的FTP程式碼,做命令解析用的是函式指標陣列來做,這樣可以省下一大堆的strcmp函式,覺得非常高階,就想記錄下來,同時組內大一同學也在做這些東西,我覺得可以借鑑一下這種處理命令的方式,看一段自己寫的測試函式吧,看完後應該就懂我再說什麼了:

#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;
}
  程式碼中初始化一個命令字元陣列,然後在函式指標陣列中安對應位置存下對應的呼叫函式,最後對應我們自己做東西,當我們去判斷命令時就只需要一句就夠了,(說明:char *cmd 為接收到的命令字串, tip 為在函式指標陣列中對應的函式下標值。)
do_cmd_func[tip](cmd);

  這個算是一個很好的設計思路了。