回调函数

✍ dations ◷ 2025-08-02 21:29:02 #计算机编程

在计算机程序设计中,回调函数,或简称回调(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>代表该程序的进程号。运行之后,该程序应当会有反应。)

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

相关

  • 生物塑化技术生物塑化技术或人体塑化技术是一种把生物或人体制作成为标本使之被永久保存的技术。该技术主要把生物或人体内器官组织的水分,以液体硅树脂混合物替代,来把遗体组织永保存。这
  • font style=text-decoration: overlinev/fontsubτ/subτ中微子(Tau neutrino)是基本粒子中微子的一类,不带电荷,符号为ντ;与τ子一起共同组成了第三代轻子,因此称作τ中微子。马丁·佩尔与其同事在1974年到1977年间于SLAC 国家加速
  • 沙县话沙县话(闽中语:)是闽中语的一种方言,主要通行于三明市的沙县一带。历史上,沙县曾是闽中地区的行政中心,因此,沙县话曾一度被当做闽中语的代表方言。沙县话以城关凤岗镇的城关腔为标
  • 南方豚尾猕猴豚尾猕猴(学名:Macaca nemestrina)又称猪尾猕猴、猪尾猴或椰子猴,属于中等体型的旧世界猴。印度东部、孟加拉、缅甸、泰国、苏门达腊、马来半岛、婆罗洲一带的热带雨林区。内地
  • 北美职业体育联赛北美职业体育联赛(英语:Major professional sports leagues in the United States and Canada),可以被简称为大联盟(Major leagues)或北美四大职业运动,是指美国和加拿大中级别最高
  • 原台南神学校校舍暨礼拜堂坐标:22°59′19″N 120°12′50″E / 22.988531°N 120.213953°E / 22.988531; 120.213953原台南神学校校舍暨礼拜堂位于台南市区,于民国九十一年(2002年)6月25日公告为市定古
  • 君士坦丁堡普世牧首普世牧首(希腊语:Οικουμενικός Πατριάρχης;俗称君士坦丁堡牧首)是君士坦丁堡(今伊斯坦布尔)的宗主教,亦被承认为正教会名义上地位最高(英语:Primus inter pare
  • 东宁 (台湾古名)东宁(闽南语:.mw-parser-output .sans-serif{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Lato,"Helvetica Neue",Helvetica,Arial,sans-serif}Tang-lê
  • 李咸池李咸池(-1853年)),福建省龙溪出身,清朝末年小刀会之乱的指挥者之一。原本在上海经营棉花生意。在上海时,与刘丽川一起发展小刀会。小刀会的内部,刘丽川是广东系的领导人,李咸池则是福
  • 大卫·朱维特大卫·朱维特(英语:David C. Jewitt,1958年-),生于英国的美国天文学家。他曾在夏威夷大学天文研究所担任教授,现任教于洛杉矶加利福尼亚大学。朱维特于1958年生于英国伦敦。于1979