找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 488|回复: 9
打印 上一主题 下一主题
收起左侧

什么是回调函数,有什么用

[复制链接]
跳转到指定楼层
楼主
ID:709761 发表于 2024-3-1 16:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
回调函数是一个通过函数指针调用的函数。为什么不直接调用函数。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:277550 发表于 2024-3-1 23:31 | 只看该作者
往往是用在SDK、或反复调用的代码,等情况。
回复

使用道具 举报

板凳
ID:1109793 发表于 2024-3-2 07:19 | 只看该作者
我隐约记得回调的意思是函数自己可以调用自己的,不一定非要通过指针调用吧
回复

使用道具 举报

地板
ID:517951 发表于 2024-3-2 08:09 | 只看该作者
用回调函数,目的就是为了功能的灵活, 可以随时通过函数指针改变软件功能
回复

使用道具 举报

5#
ID:1096586 发表于 2024-3-3 01:01 | 只看该作者
在某些简单和直接的情境下,直接调用函数就能解决问题。回调函数提供了更大的灵活性和可扩展性,使得代码更容易维护和修改,在某些情境下,使用回调函数可能更为合适:
1、需要动态性和扩展性的情境: 使用回调函数可以在运行时指定要执行的代码。这使得程序更具动态性,能够根据需要在运行时更改其行为。如果直接调用函数,代码的行为就是静态的,不能在运行时更改。

2、需要解耦合的情境: 使用回调函数可以实现函数之间的解耦合。这意味着调用方和被调用方之间的关系更加灵活,它们可以相对独立地演变。如果直接调用函数,两者之间的关系更为紧密,不容易进行修改和扩展。

3、需要通用性的情境: 回调函数可以用于实现通用的接口和框架。一个函数可以接受一个回调函数,而不关心具体的实现,这使得这个函数更加通用和可重用。直接调用函数可能需要特定的实现,降低了通用性。

事件处理: 在事件驱动的编程中,回调函数常用于处理异步事件。当某个事件发生时,通过回调函数通知相应的处理代码。这种方式比轮询或者等待更加高效。
回复

使用道具 举报

6#
ID:1112070 发表于 2024-3-3 21:13 | 只看该作者
函数指针的调用,即是一个通过函数指针调用的函数;
如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,就说这是回调函数。
回复

使用道具 举报

7#
ID:1101997 发表于 2024-4-10 10:29 | 只看该作者
其实,回调函数更多的用途是程序上看起来整洁干净,更容易模块化,和直接调用区别不大,并且还牺牲了效率,但是目前处理器速度都很快,效率和整洁易用比较起来还是让步一点。

可读性和健壮性模块化是现在程序设计的重要特点。
回复

使用道具 举报

8#
ID:1088185 发表于 2024-4-10 20:20 | 只看该作者
首先明确一些慨念问题, 回调函数,函数指针调用的函数是两件事.
回调函数其作用是连接底层驱动至应用层
例如, 要做一个串口接收及拆包的底层驱动,当接收到并解析数据包后,肯定需要一手段通知应用层去处理这数据,回调函数就是扮演这角色。
问题在写底层驱动时你的应用层还没做,我回调到哪儿都不适。
所以这回调函数就会通过函数指针的方式调用, 当你做应用层后, 就把此回调函数的指针指向你要的回调函数。
回复

使用道具 举报

9#
ID:1088185 发表于 2024-4-10 20:31 | 只看该作者
1600277881 发表于 2024-4-10 20:20
首先明确一些慨念问题, 回调函数,函数指针调用的函数是两件事.
回调函数其作用是连接底层驱动至应用层
...

比如你在用ST的库,希望它处理数据接收,收到你所指定数量的数据后通知你去处理数据,人家ST在写这库的时候你的软件还没做呢, 你让他怎样通过直接调用函数来通知你?
所以要用函数指针的方式做回调函数,你的应用做好后,就把此回调函数的指针指向你要的回调函数就完事了
回复

使用道具 举报

10#
ID:195496 发表于 2024-4-12 08:33 | 只看该作者
用函数指针可以方便的改变功能,指向不同的处理函数
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表