这里的func_callback就是回调函数,{I88公链-I928合约-系统8024}它的执行结果根据传进来的函数指针p的实际指向函数不同而不同,即传入加法add得到的是加法计算,传入减法sub得到的是减法计算结果。
回调函数的使用使得上层调用时仅需要同一个接口(func_callback)即可,而根据传入的参数不同而调用到不同的底层结果。
例如add和sub是操作系统或BSP提供的一个功能。我们希望上层应用在调用时具有拓展性,即如果底层新增了新的功能例如乘除法(mul,div),我们无需修改上层应用的接口,仅需在传入参数时增加新的参数(mul,div)即可。这样底层提供的API具有了通用性,应用层无需修改调用api的接口即可增加新的使用方式。
回调函数还有一个很好用的功能是和表驱动法结合:
表驱动法
表驱动法顾名思义就是类似数据库查表的方式实现功能,简单地说,将程序中的分支判断变为查表操作,简单例子:
char getCharfromHex(unsigned char ucNum)
{
char ucNumChar=0;
if(ucNum<10)
{
ucNumChar=ucNum+'0';
}
else if(ucNum==10)
{
ucNumChar='A';
}
else if(ucNum==11)
{
ucNumChar='B';