回調(diào)函數(shù)的概念:
回調(diào)函數(shù)就是一個(gè)被作為參數(shù)傳遞的函數(shù)。在C語(yǔ)言中,回調(diào)函數(shù)只能使用函數(shù)指針實(shí)現(xiàn),在C++、Python、ECMAScript等更現(xiàn)代的編程語(yǔ)言中還可以使用仿函數(shù)或匿名函數(shù)。
回調(diào)函數(shù)的使用可以大大提升編程的效率,這使得它在現(xiàn)代編程中被非常多地使用。同時(shí),有一些需求必須要使用回調(diào)函數(shù)來(lái)實(shí)現(xiàn)。
最著名的回調(diào)函數(shù)調(diào)用有C/C++標(biāo)準(zhǔn)庫(kù)stdlib.h/cstdlib中的快速排序函數(shù)qsort和二分查找函數(shù)bsearch中都會(huì)要求的一個(gè)與strcmp類似的參數(shù),用于設(shè)置數(shù)據(jù)的比較方法。
回調(diào)函數(shù)的使用步驟:
⑴定義一個(gè)回調(diào)函數(shù);
⑵提供函數(shù)實(shí)現(xiàn)的一方在初始化的時(shí)候,將回調(diào)函數(shù)的函數(shù)指針注冊(cè)給調(diào)用者;
⑶當(dāng)特定的事件或條件發(fā)生的時(shí)候,調(diào)用者使用函數(shù)指針調(diào)用回調(diào)函數(shù)對(duì)事件進(jìn)行處理。
回調(diào)函數(shù)中沒(méi)有參數(shù)的使用方法,如下代碼:
#include
int Callback_1() // Callback Function 1
{
printf("Hello, this is Callback_1 ");
return 0;
}
int Callback_2() // Callback Function 2
{
printf("Hello, this is Callback_2 ");
return 0;
}
int Callback_3() // Callback Function 3
{
printf("Hello, this is Callback_3 ");
return 0;
}
int Handle(int (*Callback)()) //定義回調(diào)函數(shù)體
{
printf("Entering Handle Function. ");
Callback();
printf("Leaving Handle Function. ");
}
int main()
{
printf("Entering Main Function. ");
Handle(Callback_1);
Handle(Callback_2);
Handle(Callback_3);
printf("Leaving Main Function. ");
return 0;
}
d當(dāng)我們回調(diào)的函數(shù)帶參數(shù)時(shí),需要做如下的調(diào)整:
#include
int Callback_1(int x) // Callback Function 1
{
printf("Hello, this is Callback_1: x = %d ", x);
return 0;
}
int Callback_2(int x) // Callback Function 2
{
printf("Hello, this is Callback_2: x = %d ", x);
return 0;
}
int Callback_3(int x) // Callback Function 3
{
printf("Hello, this is Callback_3: x = %d ", x);
return 0;
}
int Handle(int y, int (*Callback)(int)) //注意差異
{
printf("Entering Handle Function. ");
Callback(y);
printf("Leaving Handle Function. ");
}
int main()
{
int a = 2;
int b = 4;
int c = 6;
printf("Entering Main Function. ");
Handle(a, Callback_1);
Handle(b, Callback_2);
Handle(c, Callback_3);
printf("Leaving Main Function. ");
return 0;
}
審核編輯:湯梓紅
-
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7615瀏覽量
137827 -
編程語(yǔ)言
+關(guān)注
關(guān)注
10文章
1951瀏覽量
35018 -
回調(diào)函數(shù)
+關(guān)注
關(guān)注
0文章
87瀏覽量
11626
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
一文詳解C語(yǔ)言函數(shù)指針與回調(diào)函數(shù)
C語(yǔ)言里面的函數(shù)指針和回調(diào)函數(shù)
C語(yǔ)言回調(diào)函數(shù)學(xué)習(xí)
LabWindows/CVI 程序 回調(diào)函數(shù)設(shè)計(jì)
![LabWindows/CVI 程序 <b class='flag-5'>回</b><b class='flag-5'>調(diào)</b><b class='flag-5'>函數(shù)</b>設(shè)計(jì)](https://file1.elecfans.com//web2/M00/A7/2C/wKgZomUMQs-AL6FqAAAZDGcCwbE462.jpg)
回調(diào)函數(shù)的詳細(xì)資料說(shuō)明
![<b class='flag-5'>回</b><b class='flag-5'>調(diào)</b><b class='flag-5'>函數(shù)</b>的詳細(xì)資料說(shuō)明](https://file.elecfans.com/web1/M00/86/60/pIYBAFx3jCOAPTYkAAIm4TAodbs965.png)
C語(yǔ)言函數(shù)的回調(diào)函數(shù)
c語(yǔ)言回調(diào)函數(shù)的使用及實(shí)際作用詳解
![c語(yǔ)言<b class='flag-5'>回</b><b class='flag-5'>調(diào)</b><b class='flag-5'>函數(shù)</b>的使用及實(shí)際作用<b class='flag-5'>詳解</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
一文詳解C/C++回調(diào)函數(shù)
函數(shù)指針和回調(diào)函數(shù)的使用方法
C語(yǔ)言|回調(diào)函數(shù)的不同用法
應(yīng)用筆記 | 淺談STM32庫(kù)里的回調(diào)函數(shù)
![應(yīng)用筆記 | 淺談STM32庫(kù)里的<b class='flag-5'>回</b><b class='flag-5'>調(diào)</b><b class='flag-5'>函數(shù)</b>](https://file1.elecfans.com//web2/M00/A3/00/wKgZomUCzxeAaQAcAAHUHXdxAL4057.gif)
評(píng)論