函數(shù)指針:
在linux驅(qū)動面向?qū)ο?a target="_blank">編程思想中用的最多,利用函數(shù)指針來實現(xiàn)封裝,下面以一個簡單的例子說明:
#include
typedef struct TFT_DISPLAY
{
int pix_width;
int pix_height;
int color_width;
void (*init)(void);
void (*fill_screen)(int color);
void (*tft_test)(void);
}tft_display;
static void init(void)
{
printf("the display is initialed\n");
}
static void fill_screen(int color)
{
printf("the display screen set 0x%x\n",color);
}
tft_display mydisplay=
{
.pix_width=320,
.pix_height=240,
.color_width=24,
.init=init,
.fill_screen=fill_screen,
};
int main(int argc, char **argv)
{
mydisplay.init();
mydisplay.fill_screen(0xfff);
return 0;
}
上面的例子將一個tft_display封裝成一個對象,上面的結(jié)構(gòu)體成員中最后一個沒有初始化,這在Linux中用的非常多,最常見的是file_operations結(jié)構(gòu)體,該結(jié)構(gòu)體一般來說只需要初始化常見的函數(shù),不需要全部初始化。上面代碼中采用的結(jié)構(gòu)體初始化方式也是在Linux中最常用的一種方式,這種方式的好處在于無需按照結(jié)構(gòu)體的順序一對一。
回調(diào)函數(shù):
有時候會遇到這樣一種情況,當上層人員將一個功能交給下層程序員完成時,上層程序員和下層程序員同步工作,這個時候該功能函數(shù)并未完成,這個時候上層程序員可以定義一個API來交給下層程序員,而上層程序員只要關(guān)心該API就可以了而無需關(guān)心具體實現(xiàn),具體實現(xiàn)交給下層程序員完成即可(這里的上層和下層程序員不指等級關(guān)系,而是項目的分工關(guān)系)。這種情況下就會用到回調(diào)函數(shù)(Callback Function),現(xiàn)在假設程序員A需要一個FFT算法,這個時候程序員A將FFT算法交給程序員B來完成,現(xiàn)在來讓實現(xiàn)這個過程:
int InputData[100]={0};
int OutputData[100]={0};
void FFT_Function(int *inputData,int *outputData,int num)
{
while(num--)
{
}
}
void TaskA_CallBack(void (*fft)(int*,int*,int))
{
(*fft)(InputData,OutputData,100);
}
int main(int argc, char **argv)
{
TaskA_CallBack(FFT_Function);
return 0;
}
上面的代碼中TaskA_CallBack
是回調(diào)函數(shù),該函數(shù)的形參為一個函數(shù)指針,而FFT_Function
是一個被調(diào)用函數(shù)。可以看到回調(diào)函數(shù)中申明的函數(shù)指針必須和被調(diào)用函數(shù)的類型完全相同。
-
Linux
+關(guān)注
關(guān)注
87文章
11232瀏覽量
208950 -
回調(diào)函數(shù)
+關(guān)注
關(guān)注
0文章
87瀏覽量
11543 -
函數(shù)指針
+關(guān)注
關(guān)注
2文章
56瀏覽量
3775
發(fā)布評論請先 登錄
相關(guān)推薦
評論