Cprogramming 简明教程
Callback Function in C
回调函数非常灵活,特别是在事件驱动的编程中。当一个特定事件被触发时,将执行映射到它的一个回调函数以响应这些事件。这通常用于 GUI 应用程序,例如单击按钮这样的动作可以引发一系列预定义的 action。
Callback Function
回调函数基本上是作为参数传递给其他代码的任何可执行代码,该代码预计在给定的时间调用或执行该参数。我们可以用其他方式来定义它:如果一个函数的引用被传递给另一个函数参数进行调用,则它被称为回调函数。
下面是在 C 中的一个简单的 hello() 函数:
void hello(){
printf("Hello World.");
}
我们按如下方式声明指向此函数的指针:
void (*ptr)() = &hello;
现在,我们借助此函数指针,调用该函数{s0}
Example of Callback Function in C
此示例中,hello() 函数被定义为 myfunction() 的参数。
#include <stdio.h>
void hello(){
printf("Hello World\n");
}
void callback(void (*ptr)()){
printf("Calling a function with its pointer\n");
(*ptr)(); // calling the callback function
}
main(){
void (*ptr)() = hello;
callback(ptr);
}
Callback Function With Arguments
下面提供的示例中,我们还声明了两个具有相同原型的函数——square() 和 root()。
int square(int val){
return val*val;
}
int root(int val){
return pow(val, 0.5);
}
回调函数被定义为接收一个数字和一个函数指针,带有与上一个函数匹配的数字参数。
int callback(int a, int (*ptr)(int)){
int ret = (*ptr)(a);
return ret;
}
在 main() 函数中,我们通过传递一个数字以及 function({s1} / {s2})的名称来调用回调,这个名字在 callback 的定义中成为函数指针。
Example of Callback Function With Arguments
完整代码如下所示:
#include <stdio.h>
#include <math.h>
int callback(int a, int (*print_callback)(int));
int square(int value);
int root (int value);
int main(){
int x = 4;
printf("Square of x: %d is %d\n", x, callback(x, square));
printf("Square root of x: %d is %d\n", x, callback(x, root));
return 0;
}
int callback(int a, int (*ptr)(int)){
int ret = (*ptr)(a);
return ret;
}
int square(int val){
return val*val;
}
int root(int val){
return pow(val, 0.5);
}
Square of x: 4 is 16
Square root of x: 4 is 2