回调函数

✍ dations ◷ 2025-10-28 15:41:42 #计算机编程

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

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

相关

  • 青色青色又称绿蓝色,是指介于绿色和蓝色之间的颜色,波长大约为500-485奈米。青色可以是指黑色、绿色或蓝色,需根据前后文推断。在中国的五行学说中,青色是木的一种象征;青色在中国文
  • 奈梅亨奈梅亨(荷兰语:Nijmegen,荷兰语发音:.mw-parser-output .IPA{font-family:"Charis SIL","Doulos SIL","Linux Libertine","Segoe UI","Lucida Sans Unicode","Code2000","Gentiu
  • 英属马来亚英属马来亚是大英帝国殖民地之一,包含了海峡殖民地(1826年成立)、马来联邦(1895年成立)及五个马来属邦(1904年至1909年间取得宗主权),战后,先后改组成马来亚联邦及马来亚联合邦,直至19
  • 棕榈谷棕榈谷(Palmdale,又译棕榈岱尔或帕姆岱尔)是美国加利福尼亚州洛杉矶县北部的一个城市。棕榈谷位处莫哈维沙漠的羚羊谷(Antelope Valley)南部山脚下,面积272.2平方公里,市中心海拔81
  • 詹姆斯·马蒂斯詹姆斯·诺曼·“吉姆”·马蒂斯(英语:James Norman "Jim" Mattis,1950年9月8日-),第26任美国国防部长。美国海军陆战队退役上将,曾任美国中央司令部司令、北大西洋公约组织盟军转
  • 本杰明·克莱门斯·斯通本杰明·克莱门斯·斯通(Benjamin Clemens Stone,1933年-1994年3月19日)为英国-美国植物学家。本杰明·克莱门斯·斯通出生于中国上海,父亲为英国人,政府职员,母亲为美国人。1960年,
  • 敖飞帆敖飞帆(1989年1月14日-),湖北省武汉市人,中国足球运动员,现时效力于中乙球队吉林百嘉,司职中场。敖飞帆出自上海东亚梯队,2009年代表上海队获得十一运会足球比赛U20组冠军。2010年加
  • 斯蒂夫·古根伯格斯蒂夫·古根伯格(英语:Steven Robert "Steve" Guttenberg,1958年8月24日-)是美国的一位演员、作家、商人、制作人和导演。他在1980年代出演电视剧警察学校之后成名,此后又出演了
  • 金腰带金腰带可以指:
  • 橄榄果渣油橄榄果渣油(英语:olive pomace oil)是指从油橄榄果实压榨后的果渣中得到的油脂。当油橄榄果经机械压榨后,仍有5-8%的油脂留存在果渣中。此时,可采用溶剂等方法将剩余的油脂提取出