回調(diào)函數(shù)的概念:
回調(diào)函數(shù)就是一個被作為參數(shù)傳遞的函數(shù)。在C語言中,回調(diào)函數(shù)只能使用函數(shù)指針實現(xiàn),在C++、Python、ECMAScript等更現(xiàn)代的編程語言中還可以使用仿函數(shù)或匿名函數(shù)。
回調(diào)函數(shù)的使用可以大大提升編程的效率,這使得它在現(xiàn)代編程中被非常多地使用。同時,有一些需求必須要使用回調(diào)函數(shù)來實現(xiàn)。
最著名的回調(diào)函數(shù)調(diào)用有C/C++標準庫stdlib.h/cstdlib中的快速排序函數(shù)qsort和二分查找函數(shù)bsearch中都會要求的一個與strcmp類似的參數(shù),用于設(shè)置數(shù)據(jù)的比較方法。
回調(diào)函數(shù)的使用步驟:
⑴定義一個回調(diào)函數(shù);
⑵提供函數(shù)實現(xiàn)的一方在初始化的時候,將回調(diào)函數(shù)的函數(shù)指針注冊給調(diào)用者;
⑶當特定的事件或條件發(fā)生的時候,調(diào)用者使用函數(shù)指針調(diào)用回調(diào)函數(shù)對事件進行處理。
回調(diào)函數(shù)中沒有參數(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當我們回調(diào)的函數(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語言
+關(guān)注
關(guān)注
180文章
7598瀏覽量
136185 -
編程語言
+關(guān)注
關(guān)注
10文章
1938瀏覽量
34594 -
回調(diào)函數(shù)
+關(guān)注
關(guān)注
0文章
87瀏覽量
11543
發(fā)布評論請先 登錄
相關(guān)推薦
評論