作者largesperm (Ferric)
看板C_and_CPP
標題[問題] 使用 callback 的時機
時間Wed Jan 8 10:35:53 2020
在找 callback 的概念的時候 看到一段範例 (Code #1)
直觀看起來跟直接 call function 不是一樣嗎 (Code #2)
請問使用 callback 的時機會是什麼呢
有找過幾篇文章 大部分都是範例 有帶解釋
不過還是 ... 沒有很理解
------------ Code #1 ------------
// A simple C program to demonstrate callback
#include<stdio.h>
void A()
{
printf("I am function A\n");
}
// callback function
void B(void (*ptr)())
{
(*ptr) (); // callback to A
}
int main()
{
void (*ptr)() = &A;
// calling function B and passing
// address of the function A as argument
B(ptr);
return 0;
}
------------ Code #2 ------------
int main()
{
A();
return 0;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.76.215.38 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1578450955.A.ECB.html
1F:推 plsmaop: 沒在 c 裡面寫過 callback,在 js 裡通常是發出一個 http 01/08 10:48
2F:→ plsmaop: request 之後告訴 js runtime 說拿到 response 後執行這 01/08 10:48
3F:→ plsmaop: 個 callback,參數是 response 帶回來的內容 01/08 10:48
4F:推 plsmaop: 我想一下其他情境:可能有好幾個功能大部分的行為是一樣 01/08 10:51
5F:→ plsmaop: 的,只差在最後,那我把共同的部分抽出來,然後把不一樣 01/08 10:51
6F:→ plsmaop: 的行為包成 function,傳進去給共同的部分,共同的部分 01/08 10:51
7F:→ plsmaop: 最後會跑傳進來的 function 01/08 10:51
8F:推 LPH66: 以你的 Code#1 為例的話, 考慮 B 是函式庫裡已經寫好的程式 01/08 11:28
9F:→ LPH66: 它的有些地方會需要使用者傳入部份動作或邏輯 01/08 11:29
10F:→ LPH66: 一個最簡單的這樣的例子是 C 的 qsort 01/08 11:29
11F:→ LPH66: qsort 的第四參數是傳入一個函式, 即是這種狀況 01/08 11:30
12F:→ LPH66: 套用四樓的說法的話: 快排演算法的主邏輯是不變的 01/08 11:31
13F:→ LPH66: 不一樣的是元素如何比大小, 所以把它抽出來作為 callback 01/08 11:32
14F:→ hsnuyi: 韌體常用 01/08 12:53
15F:推 flysonics: 你去看driver code會更容易體會到用callback的時機 01/08 22:14
16F:推 ko27tye: 同樣return和參數的function pointer可用同一個callback 01/08 22:15
17F:→ flysonics: 通常是需要非即時性的handler function時會用到 01/08 22:15
18F:→ flysonics: 你如果很確定function routine的話其實直接寫就OK 01/08 22:17
19F:推 dces4212: UART接收後的handler function也是個callback 01/08 22:37
20F:推 boss0405: LinuxDriver的ops,或是HAL層的模組化 01/08 22:59
21F:→ largesperm: 原來是這樣 各位的解釋很直觀 明白了 謝謝 01/09 08:55
22F:推 cphe: 沒有馬上要執行的就叫callback 01/09 09:41
23F:→ cphe: Linux kernel很多可以看看,你這範例蠻不好的其實 01/09 09:42
24F:→ final01: 沒有馬上要執行就是callback這解釋我也是醉了 01/23 22:40
25F:推 cia1099: 你只要想寫lamda的時候就是call back的時機了 02/24 08:21