回调函数

✍ dations ◷ 2025-06-30 14:19:55 #计算机编程

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

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

相关

  • 秘教秘教,又称秘仪、密仪、密教、密意主义、密传教义等,指在一小众人间相传的秘密知识,及其组织和传授方式,被广泛认为是一个宗教术语,通常涉及神秘性、精神性或隐匿性的观点。秘教的
  • 泛代数泛代数(Universal algebra),研究通用于所有代数结构的理论,而不是代数结构的模型。举个例子,并不是将特殊的个别的群作为个体分别来学习,而是将整个群论的理论作为学习的主题。从
  • 受(梵语、巴利语:Vedanā),佛教术语,意指感受、感觉或知觉。当感官,外境,以及意识三者聚合(触)时,所升起的内心感觉,即是受。通常可以概分为痛苦(苦受)、快乐(乐受)以及没有特殊感受(不苦不
  • 北竿乡北竿乡(福州语平话字:.mw-parser-output .IPA{font-family:"Charis SIL","Doulos SIL","Linux Libertine","Segoe UI","Lucida Sans Unicode","Code2000","Gentium","Gentium
  • 一级演员一级演员,是中华人民共和国国家技术职称评定艺术系列中演员的技术水平等级。国家职称评定机构在评审后对合格的专业技术人士和申报单位下发任职通知,明确其是“一级演员”。“
  • 徐国,是西周、春秋时代的诸侯国之一,国君为嬴姓。又称徐戎,亦称徐夷或徐方,为东夷集团之一。夏代至周代,分布在今山东郯城一带。在周穆王时期,才肯臣服于周朝。周初,以今安徽泗县、
  • 飞轮飞轮(flywheel)是在旋转运动中用于储存旋转动能的一种机械装置。飞轮倾向于抵抗转速的改变,当动力源对旋转轴作用有一个变动的力矩时(例如往复式发动机),或是应用在间歇性负载时(例
  • 填词填词是指人们依照音乐或格律,填写能依声诵唱的词,从事填词工作或职业的称为填词人或作词人。由于“词”在古今有所不同,因此“填词”亦可以按所填的“词”是古或今而分类。但不
  • 希格斯机制在标准模型里,希格斯机制(英语:Higgs mechanism)是一种生成质量的机制,能够使基本粒子获得质量。为什么费米子、W玻色子、Z玻色子具有质量,而光子、胶子的质量为零?:361-368希格斯
  • 贝叶经贝叶经(卡纳达语:ತಾಳೆಗರಿ,泰米尔语:ஓலைச் சுவடி),是起源于古印度,约公元前一世纪末,因为锡兰僧团中的长老有鉴于国内曾发生战乱,担心早期流传下来的教典散失,由以坤