回调函数

✍ dations ◷ 2025-06-08 11:19:05 #计算机编程

在计算机程序设计中,回调函数,或简称回调(Callback 即call then back 被主函数调用运算后会返回主函数),是指通过参数将函数传递到其它代码的,某一块可执行代码的引用。这一设计允许了底层代码调用在高层定义的子程序。

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

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

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

下列C语言代码描述了利用回调处理POSIX风格的信号(在本示例中为SIGUSR1)的过程。值得注意的是,在处理信号的过程中,调用printf(3)是不安全的。

#include <stdio.h>#include <signal.h>#include <unistd.h>void sig(int signum){        printf("Received signal number %d!\n", signum);}int main(int argc, char *argv){        signal(SIGUSR1, sig);        pause();                return 0;}

系统调用pause(3)会导致这个例子不做任何有意义的事,但这样做可以给你充分的时间来给这个进程发送信号。(在类Unix系统上,可以调用kill -USR1 <pid>,其中<pid>代表该程序的进程号。运行之后,该程序应当会有反应。)

回调的形式因程序设计语言而有差别。

相关

  • 多核巨细胞巨细胞(英语:giant cell,或称为多核巨细胞)是多个不同细胞(常为组织细胞)融合在一起形成的,常伴随形成肉芽肿。巨细胞可作为感染的反应而形成,这些感染包括结核病、疱疹或HIV,也可由
  • GAP良好农业规范 (Good Agricultural Practices, GAP)的一套用于农业生产且生产结果与执行者利益相一致的操作规范。对于由哪些方法组成“良好农业规范”,有着很多不同的定义。
  • 阿普第阶灭绝事件阿普第阶灭绝事件(Aptian extinction)是个发生于白垩纪早期的小规模灭绝事件,年代为约1亿1700万年前到1亿1600万年前,大约是阿普第阶中期。根据地层中的证据,阿普第阶灭绝事件对
  • 贝尔尼·阿尔德贝尔尼·朱利安·阿尔德(英语:Berni Julian Alder,1925年9月9日-),美国物理学家,研究方向为统计力学,他是物理学中数值模拟的先驱。
  • 外切酶外切酶,或核酸外切酶(英语:exonucleases)可以是单独存在的酶,或是大型酶复合物的一部分。此类酵素能将聚核苷酸链分解成核苷酸。作用方式是将3'或5'端上的磷酸酯键水解。脂酶(胆盐
  • 洛桑大学坐标:46°31′21″N 06°34′46″E / 46.52250°N 6.57944°E / 46.52250; 6.57944洛桑大学(法语:Université de Lausanne,缩写UNIL),是瑞士的一所大学,位于西南部沃州的洛桑市。
  • 陈克明陈克明(英语:Bill Keh-Ming Chen),男性,中华民国外交官、经济学家。
  • 中央分区国家冰球联盟的中央分区成立于1992-93年度赛季;当时隶属中央分区的球队分别是:1996-97年度赛季,温尼伯喷射机迁往美国亚利桑那州凤凰城,并改名为凤凰城土狼。1998-99年度赛季,联盟重
  • DEEP (歌手组合)DEEP是来自日本的四人男子歌唱团体,前身为COLOR。唱片发行公司为Rhythm zone。团体所属事务所为LDH。初代COLOR(2004年~2006年)由EXILE的主唱ATSUSHI领队主唱及制作。2006年1
  • 激波 (天文物理)激波在天文物理的环境中屡见不鲜。一些在天文物理中的激波例子如下:由于低密度的环境,多数天文学的激波是无碰撞。这意味着因为平均自由径太大,经常超过系统的尺度,激波不是由两