| 本帖最后由 chenbb8 于 2013-7-29 20:42 编辑 
 switch有什么不好吗?听说在ARM中只要case的值是连续的就会被优化成函数指针表的形式。
 既然这样就直接做一个函数指针表算了。
 假设你的case对象是连续的。从0开始到5
 enum{NUM0, NUM1, NUM2, NUM3, NUM4, NUM5, NUM6,NUM_SIZE}//这里可以改成你需要的有意义的数字
 typedef void (*pTest_t)(void);//定义函数指针的类型
 //下面是6个case的处理函数
 void NUM0Handle(void){……}
 void NUM1Handle(void){……}
 ……
 void NUM6Handle(void){……}
 
 pTest_t  TestTbl[NUM_SIZE] = {NUM0Handle, NUM1Handle……NUM6Handle};
 
 main()
 {
 ..............
 TestTbl[NUM1]();//这样就是执行了一个NUM1对应的函数了
 ................
 }
 这种方法就叫查表法:loveliness:
 |