2009年4月27日 星期一

callback function範例

如果你使用了某個function,那麼你就是『call』了一個function。如果系統或是函式是要求你給一個function pointer,這個function pointer指到一個實際的函式(多半這個函式是你自己寫的)。然後它會在適當的時間呼叫此function,則此function就是所謂的 callback function。因為這個function是被『callback』了。

現在舉一個例子,有一隻程式包含兩個.c檔,分別是main.c和library.c,
main是主程式,在main執行時會call library.c來進行運算,
但是library.c不知道要做 "加減" 還是 "乘除",
只有main知道,所以library必須透過callback的方式來call main下的函式,
這種方式就叫做callback function。

main.c
#include "stdio.h"
extern int library(int , int);

int (*callback)(void);

int func_1(void)
{
int decide;
printf("Please decide + or - (1 for + , 2 for -)\n");
scanf("%d",&decide);
return decide;
}

int func_2(void)
{
int decide;
printf("Please decide * or / (3 for * , 4 for /)\n");
scanf("%d",&decide);
return decide;
}

int main()
{
int a=5,b=10;
int ans=0;
callback = func_1; //main可決定要加減還是乘除
//callback = func_2;

ans=library(a,b);

printf("Ther answer is %d\n",ans);
return 0;
}

library.c
#include "stdio.h"

extern int (*callback)(void);

int library(int x,int y)
{
int choice = 0;
choice = callback();
if(choice == 1)
return x+y;
else if(choice == 2)
return x-y;
if(choice == 3)
return x*y;
else if(choice == 4)
return x/y;
else
printf("fuck error\n");
}

實際應用的範例:
main是我們寫的,library是別家公司寫的,別家公司寫個library API讓我們call,
但是他們不知道我們要對參數做啥動作,因此預先寫一段 choice = callback()
,我們可以依據自身的需求修改(func_1 , func_2)來讓library的回傳值符合我們的需求。

沒有留言: