[問題] 使用 callback 的時機

看板C_and_CPP作者 (Ferric)時間4年前 (2020/01/08 10:35), 編輯推噓9(9016)
留言25則, 11人參與, 4年前最新討論串1/1
在找 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

01/08 10:48, 4年前 , 1F
沒在 c 裡面寫過 callback,在 js 裡通常是發出一個 http
01/08 10:48, 1F

01/08 10:48, 4年前 , 2F
request 之後告訴 js runtime 說拿到 response 後執行這
01/08 10:48, 2F

01/08 10:48, 4年前 , 3F
個 callback,參數是 response 帶回來的內容
01/08 10:48, 3F

01/08 10:51, 4年前 , 4F
我想一下其他情境:可能有好幾個功能大部分的行為是一樣
01/08 10:51, 4F

01/08 10:51, 4年前 , 5F
的,只差在最後,那我把共同的部分抽出來,然後把不一樣
01/08 10:51, 5F

01/08 10:51, 4年前 , 6F
的行為包成 function,傳進去給共同的部分,共同的部分
01/08 10:51, 6F

01/08 10:51, 4年前 , 7F
最後會跑傳進來的 function
01/08 10:51, 7F

01/08 11:28, 4年前 , 8F
以你的 Code#1 為例的話, 考慮 B 是函式庫裡已經寫好的程式
01/08 11:28, 8F

01/08 11:29, 4年前 , 9F
它的有些地方會需要使用者傳入部份動作或邏輯
01/08 11:29, 9F

01/08 11:29, 4年前 , 10F
一個最簡單的這樣的例子是 C 的 qsort
01/08 11:29, 10F

01/08 11:30, 4年前 , 11F
qsort 的第四參數是傳入一個函式, 即是這種狀況
01/08 11:30, 11F

01/08 11:31, 4年前 , 12F
套用四樓的說法的話: 快排演算法的主邏輯是不變的
01/08 11:31, 12F

01/08 11:32, 4年前 , 13F
不一樣的是元素如何比大小, 所以把它抽出來作為 callback
01/08 11:32, 13F

01/08 12:53, 4年前 , 14F
韌體常用
01/08 12:53, 14F

01/08 22:14, 4年前 , 15F
你去看driver code會更容易體會到用callback的時機
01/08 22:14, 15F

01/08 22:15, 4年前 , 16F
同樣return和參數的function pointer可用同一個callback
01/08 22:15, 16F

01/08 22:15, 4年前 , 17F
通常是需要非即時性的handler function時會用到
01/08 22:15, 17F

01/08 22:17, 4年前 , 18F
你如果很確定function routine的話其實直接寫就OK
01/08 22:17, 18F

01/08 22:37, 4年前 , 19F
UART接收後的handler function也是個callback
01/08 22:37, 19F

01/08 22:59, 4年前 , 20F
LinuxDriver的ops,或是HAL層的模組化
01/08 22:59, 20F

01/09 08:55, 4年前 , 21F
原來是這樣 各位的解釋很直觀 明白了 謝謝
01/09 08:55, 21F

01/09 09:41, 4年前 , 22F
沒有馬上要執行的就叫callback
01/09 09:41, 22F

01/09 09:42, 4年前 , 23F
Linux kernel很多可以看看,你這範例蠻不好的其實
01/09 09:42, 23F

01/23 22:40, 4年前 , 24F
沒有馬上要執行就是callback這解釋我也是醉了
01/23 22:40, 24F

02/24 08:21, 4年前 , 25F
你只要想寫lamda的時候就是call back的時機了
02/24 08:21, 25F
文章代碼(AID): #1U5K0BxB (C_and_CPP)