看板 C_and_CPP 關於我們 聯絡資訊
在找 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://www.ptt.cc/bbs/C_and_CPP/M.1578450955.A.ECB.html
plsmaop: 沒在 c 裡面寫過 callback,在 js 裡通常是發出一個 http 01/08 10:48
plsmaop: request 之後告訴 js runtime 說拿到 response 後執行這 01/08 10:48
plsmaop: 個 callback,參數是 response 帶回來的內容 01/08 10:48
plsmaop: 我想一下其他情境:可能有好幾個功能大部分的行為是一樣 01/08 10:51
plsmaop: 的,只差在最後,那我把共同的部分抽出來,然後把不一樣 01/08 10:51
plsmaop: 的行為包成 function,傳進去給共同的部分,共同的部分 01/08 10:51
plsmaop: 最後會跑傳進來的 function 01/08 10:51
LPH66: 以你的 Code#1 為例的話, 考慮 B 是函式庫裡已經寫好的程式 01/08 11:28
LPH66: 它的有些地方會需要使用者傳入部份動作或邏輯 01/08 11:29
LPH66: 一個最簡單的這樣的例子是 C 的 qsort 01/08 11:29
LPH66: qsort 的第四參數是傳入一個函式, 即是這種狀況 01/08 11:30
LPH66: 套用四樓的說法的話: 快排演算法的主邏輯是不變的 01/08 11:31
LPH66: 不一樣的是元素如何比大小, 所以把它抽出來作為 callback 01/08 11:32
hsnuyi: 韌體常用 01/08 12:53
flysonics: 你去看driver code會更容易體會到用callback的時機 01/08 22:14
ko27tye: 同樣return和參數的function pointer可用同一個callback 01/08 22:15
flysonics: 通常是需要非即時性的handler function時會用到 01/08 22:15
flysonics: 你如果很確定function routine的話其實直接寫就OK 01/08 22:17
dces4212: UART接收後的handler function也是個callback 01/08 22:37
boss0405: LinuxDriver的ops,或是HAL層的模組化 01/08 22:59
largesperm: 原來是這樣 各位的解釋很直觀 明白了 謝謝 01/09 08:55
cphe: 沒有馬上要執行的就叫callback 01/09 09:41
cphe: Linux kernel很多可以看看,你這範例蠻不好的其實 01/09 09:42
final01: 沒有馬上要執行就是callback這解釋我也是醉了 01/23 22:40
cia1099: 你只要想寫lamda的時候就是call back的時機了 02/24 08:21