在C中注册回调函数是什么意思? | 码农家园

what do you mean by registering a callback function in C?

谁能告诉我在C中注册一些示例的回调函数的确切含义? 我在网上进行了很多搜索,但找不到满意的答案。 甚至在堆栈溢出中进行搜索,但都无法获得完美的想法。

什么是通知回调和异步回叫?

相关讨论
  • C中什么是'回调'的可能重复形式以及如何实现?
  • 另请参阅stackoverflow.com/a/147241/20270
  • Wikipedia页面是不错的en.wikipedia.org/wiki/Callback_%28computer_programming%29
  • stackoverflow.com/questions/2152974/

注册回调函数只是意味着您正在安排一个外部实体来调用您的函数。

它可能会在以后发生,或者可能立即发生。一个简单的例子是qsort。声明如下:

1
2
void qsort(void *base, size_t nel, size_t width,
       int (*compar)(const void *, const void *));

为了使用它,必须将指针传递给比较元素的函数-回调。

那是一个简单的示例,但是通常'注册回调'意味着将函数指针传递给将来会为您调用该函数的人。


注册回调意味着将函数指针传递给将通过该指针调用函数的函数指针

为了更容易理解,请考虑A和B,它们是代码中涉及的两个实体。
一个写了一个函数说myFunc

1
2
3
4
char myFunc(int a)
{
/* Code written by A*/
}

现在,当说到A将向B注册一个回调时,这意味着A将向B发送函数指针
通过向B发送函数指针,A提供了对函数的访问

要注册回调,将有一个函数,其中A可以传递指针
A将调用该函数为

1
2
cb_register(myFunc);
// Passed the address of Function

此cb_register函数在B中定义为

1
2
3
4
5
6
7
typedef void (*cb_fn_ptr)(int a);

void cb_register(cb_fn_ptr cb)
{
    // In this function B can store the address in a structure member

}

例如,声明了一个struct_B来存储

1
2
3
4
struct s_B {
    cb_fn_ptr cb;
    // cb will have address whenever B
};

B已存储了地址(函数指针指向该地址),以后可以使用它来调用函数。

当B通过函数指针调用函数时,称为回调。
B只需知道调用该函数的函数原型,就可以完全不知道该函数做什么。
在这种情况下,函数将调用为

1
2
3
4
5
struct s_B temp;
char ret_val;
int arg_val;
ret_val = temp->cb(arg_val)
//This is a callback

(0)

相关推荐