迦翔
Lv 6
迦翔 發問時間: 電腦與網際網路程式設計 · 1 0 年前

關於 函式指標 callback function的co

請問各位前輩 C語言裡的

下面這段code要如何解釋

typedef struct callfunction;

{

void (*function)(void);

}CALLBACK;

CallBackFun( 20, StartFun);

void CallBackFun(int num, void (*function)(void))

{

p_Dev->table[num].function = function;

}

typedef struct data

{

CALLBACK table[number];

}*PDEV;

PDEV p_Dev;

2 個解答

評分
  • 1 0 年前
    最佳解答

    程式不完整、而且有錯,不敢保證下面講的 100% 正確,99%應該有。

    typedef struct callfunction // (1) 刪除不可加上的 ;,callfunction 不必要

    { void (*function)(void);

    } CALLBACK;

    typedef struct data // data 不必要

    { CALLBACK table[50]; // (2) number未宣告,且不建議這樣用,我把它換成 50

    } *PDEV;

    PDEV p_Dev; // (3)

    void CallBackFun(int num, void (*function)(void)) // (4) p_Dev未宣告怎可先用?搬到這裡

    { p_Dev->table[num].function = function; }

    void StartFun(void) { }; // (5) 你的程式裡沒這東西,怎麼呼叫?

    int main()

    { CallBackFun(20, StartFun); // (6) 這東西不能獨立在函數外!

    return 0;

    }

    (1) 定義CALLBACK為 void函數(void) 指標。

    (2) 用結構定義 *PDEV 為 (1) 的陣列型態

    (3) 宣告 p_Dev 為 PDEV 型變數

    (4) 定義 CallBackFun(int n, void (*func)(void)),

      它只是把表列中的第 n 個函數定義成 func。

    (5) 不用講吧!?

    (6) 呼叫CallBackFun 設定表中第20個函數為 StartFun

    這應該是 callback API 的東西吧!

    提供一堆的 callback 讓使用者去定義。

    使用者定對時,就用 (6) 的方式,叫 CallBackFun 去設定第 x 個 callback func 的動作!

    它應該要有個保險動作:先設定過所有的 callback 為

    void dumy(void) { }

    不然,很可怕!

還有問題?馬上發問,尋求解答。