管理员
  
- 积分
- 165524
- 金钱
- 165524
- 注册时间
- 2010-12-1
- 在线时间
- 2116 小时
|
发表于 2012-12-15 20:22:23
|
显示全部楼层
这个是比较复杂,关键是(*(u32(*)()),这部分用来修饰usmart_dev.funs[id].func,其实就是个强制转换。usmart_dev.funs[id].func本身是一个void*的函数指针,通过(*(u32(*)()),将void*的函数指针强制转换为返回值是u32的函数指针然后参数不定。其实,还可以写成这样:
case 0://无参数(void类型)
res=(*(u32(*)())usmart_dev.funs[id].func)();
break;
case 1://有1个参数
res=(*(u32(*)(u32))usmart_dev.funs[id].func)(temp[0]);
break;
case 2://有2个参数
res=(*(u32(*)(u32,u32))usmart_dev.funs[id].func)(temp[0],temp[1]);
break;
case 3://有3个参数
res=(*(u32(*)(u32,u32,u32))usmart_dev.funs[id].func)(temp[0],temp[1],temp[2]);
这就确定了参数的个数,编译也是正常通过的。
这里我们进行简化,干脆就不指定参数个数,由后面的内容决定函数参数个数。
|
|