回调函数

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