回调函数

✍ dations ◷ 2025-11-28 04:30:16 #计算机编程

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

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

相关

  • 水仙花水仙(学名:Narcissus tazetta subsp. chinensis)为多花水仙的一个亚种,分布于东亚的海滨温暖地区。漳州水仙、普陀水仙、崇明水仙为中国最佳三大水仙品种。水仙是很欢迎的年花,因
  • 吖啶黄吖啶黄(C14H14N3Cl)是一种从煤焦油提取的染料。CAS号为8048-52-0,外棕红色。在1912年为埃尔利希(Paul Ehrlich)将他用于抗菌药,而在第一次世界大战时广泛用于杀灭昏睡病的病原体
  • 威廉·萧克利威廉·肖克利(英语:William Shockley,1910年2月13日-1989年8月12日),英国出生的美国物理学家和发明家,一生共获得90多项专利。他和约翰·巴丁、沃尔特·布喇顿共同发明了晶体管。他
  • 戈兰高地戈兰高地(阿拉伯语:هضبة الجولان‎,转写:Hadhbat al-Jaulan,希伯来语:רמת הגולן‬‎)南北长71公里,中部最宽处约43公里,面积1800平方公里(其中以色列控制1200平方
  • 氯化铍氯化铍(化学式:BeCl2)是碱土金属铍的氯化物,有剧毒,室温下为雪白色易升华的固体。固态存在多种晶型,含有不同方式堆积的BeCl4四面体。 气相500-600°C时,氯化铍以二聚体Cl-Be<(Cl)2
  • 安德烈·林德安德烈·迪米特里耶维奇·林德(俄语:Андре́й Дми́триевич Ли́нде,英语:Andrei Dmitriyevich Linde,1948年3月2日-),美籍俄裔宇宙学家,现任斯坦福大学教授。
  • 胡其俊胡其俊(生卒年不详),字朴生,明末官员。湖广孝感县(今湖北省孝感市)人。胡其俊于万历四十三年(1615年)中式乙卯科举人,万历四十四年(1616年)联捷丙辰科钱士升榜三甲进士。万历四十八年(16
  • 克里特侏儒河马克里特侏儒河马()是已灭绝的河马,生存于更新世的克里特。克里特侏儒河马下有两个亚种,即及。后者是最为细小的,但较塞浦路斯侏儒河马为大。克里特侏儒河马的骨头是于1920年代在克
  • 阿葰·兰帕尔阿葰·兰帕尔(印地语:अर्जुन रामपाल,英文:Arjun Rampal,1972年11月26日-),是印度宝莱坞男演员、模特儿、电影监察及电视主持人。他是现今印度其中一位最成功的男演员之
  • 康纳尔·肯尼迪康纳尔·肯尼迪(英语:John Conor Richardson Kennedy,1994年7月25日-)是小罗伯特肯尼迪(英语:Robert F. Kennedy Jr.)的儿子,是肯尼迪家族的后裔,罗伯特·弗朗西斯·肯尼迪的孙子。他