Description
簡單的說,如果你使用了某個function,那麼你就是『call』了一個function。如果系統或是函式是要求你給一個function pointer,這個function pointer指到一個實際的函式(多半這個函式是你自己寫的)。然後它會在適當的時間呼叫此function,則此function就是所謂的 callback function。因為這個function是被『callback』了。
其實這一段是大家公定之類的定義,只是覺得講的沒讓我很能體會。
我在網路上有看到一位我覺得是高手的大大,他為此做了一番解釋。
經過體會之後,我試著用自己的話表達對CallBack Function做些註解。
以下是那位大大寫的解釋,藍色是我加的。
glutReshapeFunc(填上自定函式的名稱); //填上自定函式的名稱=自定函式的指標
能指定一個自定函式當Callback函式
一般的函式是你在程式碼中有呼叫才執行的,參數是你給的,可能在程式碼中給的或鍵盤輸入
Callback函式則是作業系統來呼叫的,參數是系統給的
而glutReshapeFunc這個函式要的是一個自定函式的指標
以我寫的code當例子glutReshapeFunc(WindowSize);
WindowSize是我自己寫的函式,名字也是自己取,glutReshapeFunc並沒有限制你填入的函式名稱
但是對函式的原形有限制,這是WindowSize的原形
void WindowSize(int , int ); // 這個就是自己寫的函式也就是Callback函式
void是固定的,參數也固定兩個,兩個參數的資料型態也固定是int,參數名稱倒是可以自己取
那麼.....glutReshapeFunc所指定的WindowSize到底做了什麼?
當你改變視窗大小時,視窗的長寬改變了,作業系統也察覺到了
於是作業系統呼叫了WindowSize,給了WindowSize新的視窗長寬參數,並執行WindowSize的內容
所以WindowSize的那兩個參數不是你給程式的,是作業系統要給你的(程式)