1. 程式人生 > 其它 >一個例項學會回撥函式

一個例項學會回撥函式

技術標籤:計算機c++

背景介紹

最近使用回撥函式,此文連線有很詳細的介紹,尤其是兩篇知乎文章,連結如下:

https://blog.csdn.net/yilovexing/article/details/93192484

https://www.zhihu.com/question/19801131/answer/27459821

https://www.zhihu.com/question/19801131/answer/13005983

回撥函式概念

程式設計分為兩類:系統程式設計(system programming)和應用程式設計(application programming)。所謂系統程式設計,簡單來說,就是編寫

而應用程式設計就是利用寫好的各種庫來編寫具某種功用的程式,也就是應用。系統程式設計師會給自己寫的庫留下一些介面,即API(application

programming interface,應用程式設計介面),以供應用程式設計師使用。所以在抽象層的圖示裡,庫位於應用的底下。

當程式跑起來時,一般情況下,應用程式(application program)會時常通過API呼叫庫裡所預先備好的函式。但是有些庫函式(library function)

卻要求應用先傳給它一個函式,好在合適的時候呼叫,以完成目標任務。這個被傳入的、後又被呼叫的函式就稱為回撥函式(callback function)。

回撥函式C程式碼例子

你到一個商店買東西,剛好你要的東西沒有貨,於是你在店員那裡留下了你的電話,過了幾天店裡有貨了,店員就打了你的電話,然後你接到電話後就到店裡去取了貨。

在這個例子裡,你的電話號碼就叫回撥函式,你把電話留給店員就叫登記回撥函式,店裡後來有貨了叫做觸發回撥事件,店員給你打電話叫做呼叫回撥函式,你到店裡去取貨叫做響應回撥事件

#include "stdio.h"


void buyer1PhoneNumber()    				  //回撥函式 buyer1 
{
	printf("請在有貨的時候聯絡我\n");           //響應回撥函式
}

void buyer2PhoneNumber()    				  //回撥函式 buyer2 
{
	printf("請在有貨的時送貨上門\n");           //響應回撥函式
}

void salemanCallBack(void (* buyer)())		 //店員中間程式
{
	printf("確定您的取貨方式");
	buyer();
}


int main(void)								 //應用程式
{
	salemanCallBack(buyer1PhoneNumber);      //呼叫回撥函式
	salemanCallBack(buyer2PhoneNumber);
	return 0;
}

例子說明:

1 應用程式是呼叫回撥函式,即上例中main()函式;

2 回撥函式通過主函式(main)呼叫中間程式介面函式(salemanCallBack),註冊回撥函式;

3 中間程式介面函式(salemanCallBack)呼叫回撥函式(salemanCallBack(buyer1PhoneNumber););

4 回撥函式(buyer1PhoneNumber)響應回撥事件(printf("請在有貨的時候聯絡我\n"); );

響應回撥事件主體是回撥函式本身,響應事件自定義在回撥函式內部。

中間程式可維護成一個系統庫等形式。