什么是回调函数

[复制链接]
 楼主| supernan 发表于 2011-11-24 09:24 | 显示全部楼层 |阅读模式
是不是通过函数指针调用的那个函数就能称为回调函数?
栩栩如生 发表于 2011-11-24 09:33 | 显示全部楼层
1.什么是回调函数?
     回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,
     当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。

2.为什么命名为回调函数?
    “回调”这两个字的来源:一般的函数调用是调用者调用接口实现功能,而这里却是调用者提供一个函数
     让实现者来调用从而完成想要的功能,即我调用你来调用我自己来实现功能,这就是所谓的“回调”。
                   调用者---调用---实现功能
                   调用者---提供---实现功能

3.为什么要引入回调函数?
  A.方便性:
      同一个函数,通过指针,指向同一类型的不同函数地址,调用统一类型的不同函数,大大增强了该函数的
      灵活性,不用写多个函数。如窗口处理过程。   
  
  B.程序结构化清晰:
      在音频处理函数中,留出回调函数接口,可以让音频函数结构比较好,不至于加入很多按键等处理消息。
      也许有人有疑问,  不用回调方式也可以!不用回调方式有时比较麻烦:调用其它函数,而其它函数可能
      根本不是自己处理的,不知道如何留接口,如何定义这个函数。而用回调函数则不必关心这个问题,只 需要定义一个 void *pFun; 然后定义一个函数 callback(pFun) 留做接口就行了。后面把函数的指针传进来强行转换就可以了。
dingy 发表于 2011-11-24 09:41 | 显示全部楼层
call back 的概念很简单,但是内涵很深刻。 当你知道 why 要用回调, 而且知道 when, where 时, 可以肯定你是一个高手了。mcu 的程序很简单, 很少用到回调, 也没有必要用。 在大型 c/c++ 程序中, call back 必不可少, 其实在VC, C++Builder, C#, VB 中的 event, 都是回调。与原生态的 c, C++一样,本质都是一个函数指针。
 楼主| supernan 发表于 2011-11-24 09:51 | 显示全部楼层
嗯,多谢几位,其实我在网上也看到了
张凤武 发表于 2011-11-29 14:23 | 显示全部楼层
2楼正解
hotpower 发表于 2011-12-2 00:00 | 显示全部楼层
tl5324260 发表于 2011-12-5 12:46 | 显示全部楼层
1.什么是回调函数?
     回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,
     当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。

2.为什么命名为回调函数?
    “回调”这两个字的来源:一般的函数调用是调用者调用接口实现功能,而这里却是调用者提供一个函数
     让实现者来调用从而完成想要的功能,即我调用你来调用我自己来实现功能,这就是所谓的“回调”。
                   调用者---调用---实现功能
                   调用者---提供---实现功能

3.为什么要引入回调函数?
  A.方便性:
      同一个函数,通过指针,指向同一类型的不同函数地址,调用统一类型的不同函数,大大增强了该函数的
      灵活性,不用写多个函数。如窗口处理过程。   
  
  B.程序结构化清晰:
      在音频处理函数中,留出回调函数接口,可以让音频函数结构比较好,不至于加入很多按键等处理消息。
      也许有人有疑问,  不用回调方式也可以!不用回调方式有时比较麻烦:调用其它函数,而其它函数可能
      根本不是自己处理的,不知道如何留接口,如何定义这个函数。而用回调函数则不必关心这个问题,只 需要定义一个 void *pFun; 然后定义一个函数 callback(pFun) 留做接口就行了。后面把函数的指针传进来强行转换就可以了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

730

主题

10412

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部