关于什么是回调函数以及回调函数怎么使用就不说了,随便百度一下有很多解答。在这直说一下为什么使用回调函数以及使用回调有哪些好处?
首先来看一下下面的代码?printWelcome()和printGoodbye()就相当于是封装在dll中的函数,而callback是定义在我们应用程序中的函数。
#include <stdio.h>
void printWelcome(int len)
{
printf("欢迎欢迎 -- %d/n", len);
}
void printGoodbye(int len)
{
printf("送客送客 -- %d/n", len);
}
void callback(int times, void (* print)(int))
{
int i;
for (i = 0; i < times; ++i)
{
print(i);
}
printf("/n我不知道你是迎客还是送客!/n/n");
}
void main(void)
{
callback(10, printWelcome);
callback(10, printGoodbye);
printWelcome(5);
}
上面的代码也可以下城这种方式:
#include <stdio.h>
void printWelcome(int len)
{
printf("欢迎欢迎 -- %d/n", len);
}
void printGoodbye(int len)
{
printf("送客送客 -- %d/n", len);
}
void callWelcome(int times)
{
int i;
for (i = 0; i < times; ++i)
{
printWelcome(i);
}
}
void callGoodbye(int times)
{
int i;
for (i = 0; i < times; ++i)
{
printGoodbye(i);
}
}
void main(void)
{
callWelcome(10);
callGoodbye(10);
printWelcome(5);
}
可以看到上面两种在调用printWelcome()和printGoodbye()函数时,都需要在知道printWelcome()和printGoodbye()参数的基础上才能调用这两个函数,并不像其他文章所说的使用回调函数不需要关心被调函数的任何东西
但是从上面的代码对比中,明显可以看到使用回调函数一个好处是:只要符合参数类型一样、返回值类型一样的函数都可以通过callback(即回调函数)调用,这样一来只要我想要调用这种模式的函数的地方都可以使用这个callback来调用。