switch-case结构过长,会引起查看不方便,可以将长switch-case结构改为这种形式这种方法比较适合switch-case分支处理比较整齐的情况。
#include "stdio.h"
#define FUNC_OK 0x01
#define FUNC_FAULT 0x00
enum{
PRINTA=0x01,
PRINTB,
PRINTC
}PRINT_TYPE;
int func_printHelloA(char value,short len);
int func_printHelloB(char value,short len);
int func_printHelloC(char value,short len);
int func_printWorldA(char value,short len);
int func_printWorldB(char value,short len);
int func_printWorldC(char value,short len);
typedef int (*pfunc_printHello)(char value,short len);
typedef int (*pfunc_printWorld)(char value,short len);
typedef struct
{
short printType;
pfunc_printHello printHello;
pfunc_printWorld printWorld;
}PRINT_S;
static PRINT_S g_printFuncArry[]=
{
{PRINTA,func_printHelloA,func_printWorldA},
{PRINTB,func_printHelloB,func_printWorldB},
{PRINTC,func_printHelloC,func_printWorldC}
};
int func_print_out(short printType,char value,short len)
{
short index = 0;
for(index = 0; index < sizeof(g_printFuncArry)/sizeof(PRINT_S); index++)
{
if(printType == g_printFuncArry[index].printType){
break;
}
}
if(index==sizeof(g_printFuncArry)/sizeof(PRINT_S))
{
printf("erro,there is no index:%d\n",index);
return FUNC_FAULT;
}
if(NULL == g_printFuncArry[index].printHello)
{
printf("erro,function is null\n");
return FUNC_FAULT;
}
g_printFuncArry[index].printHello(value,len);
g_printFuncArry[index].printWorld(value,len);
return FUNC_OK;
}
int main(void)
{
short printType;
printType = 0x02;
//改成这种结构后,相当于只用这一句,就可以代表N行switch-case语句
//所有的对应关系,已经在结构体 PRINT_S 生成的列表 g_printFuncArry 中定义
func_print_out(printType,1,12);
/*
switch(printType)
{
case PRINTA:break;
case PRINTB:break;
case PRINTC:break;
default :break;
}*/
return 0;
}
int func_printHelloA(char value,short len)
{
int i;
for(i=0; i<len; i++)
printf("helloa:%d\n",value);
printf("\n");
return FUNC_OK;
}
int func_printHelloB(char value,short len)
{
int i;
for(i=0; i<len; i++)
printf("hellob:%d\n",value);
printf("\n");
return FUNC_OK;
}
int func_printHelloC(char value,short len)
{
int i;
for(i=0; i<len; i++)
printf("helloc:%d\n",value);
printf("\n");
return FUNC_OK;
}
int func_printWorldA(char value,short len)
{
int i;
for(i=0; i<len; i++)
printf("worlda:%d\n",value);
printf("\n");
return FUNC_OK;
}
int func_printWorldB(char value,short len)
{
int i;
for(i=0; i<len; i++)
printf("worldb:%d\n",value);
printf("\n");
return FUNC_OK;
}
int func_printWorldC(char value,short len)
{
int i;
for(i=0; i<len; i++)
printf("worldc:%d\n",value);
printf("\n");
return FUNC_OK;
}