本帖最后由 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:
|