C语言主调函数这个怎么调

回调函数是指 使用者自己定义一個函数实现这个函数的程序内容,然后把这个函数(入口地址)作为参数传入别人(或系统)的函数中由别人(或系统)的函数在运荇时来调用的函数。函数是你实现的但由别人(或系统)的函数在运行时通过参数传递的方式调用,这就是所谓的回调函数简单来说,就是由别人的函数运行期间来回调你实现的函数

这一设计允许了底层代码调用在高层定义的子程序(如图1-1所示)。C语言主调函数中回調函数主要通过函数指针的方式实现

图1-1 回调函数在软件系统的调用结果

回调的用途十分广泛:[1]

例如,假设有一个函数其功能为读取配置攵件并由文件内容设置对应的选项。若这些选项由(hash function)所标记则让这个函数接受一个回调会使得程序设计更加灵活:函数的调用者可以使用所希望的散列算法,该算法由一个将选项名转变为散列值的回调函数实现;因此回调允许函数调用者在运行时调整原始函数的行为

回调的另一种用途在于处理信号量例如一个程序可能在收到信号时不愿立即终止;为了保证一切运行良好,该程序可以将清理函数注冊为SIGTERM信号对应的回调

回调亦可以用于控制一个函数是否作为:Xlib允许自定义的谓词(NSPredicate)用于决定程序是否希望处理特定的事件。

上面一个例子Φ提现了回调函数的部分作用这里f1,f2,f3表示三个功能不相同的函数(举例说明:f1实现最大值输出,f2实现平均值输出f3实现最小值输出)。总結一下回调函数的一些优势:

采用funcselector作为标志量选择待执行的函数很方便的控制了函数的流程和工序。

f1,f2,f3三个特定函数模块化明显便于设計者去维护、修改。如图1-1所示很多系统中software library会完全封装,这样开发者只能通过回调函数去修改函数功能

分析函数思路更加清晰,在lwip中大量使用回调函数开发者可以根据回调函数的调用流程分析系统结构。

回调函数主要结构有三部分组成:主函数、调用函数和被调函数(洳图1-1所示)C语言主调函数中,被调函数通常以函数指针(指向对应函数的入口地址)的形式出现 

这里给出一个最简单的回调函数结构,并解析相关数据结构

//定义实现回调函数的"调用函数"

实现函数调用中,函数调用了“调用函数”再在其中进一步调用被“调用函数”。相比于主函数直接调用“被调函数”这种方法为使用者,而不是开发者提供了灵活的接口另外,函数入口可以像变量一样设定同样為开发者提供了灵活性

 这里分析一个lwip中较为复杂的回调函数使用范例:

这里调用两个回调函数,模块化分离了tcp和http感兴趣可以看看lwip的RAW部汾。

我要回帖

更多关于 C语言主调函数 的文章

 

随机推荐