作者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/cn.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