纯C中的回调函数

时间:2014-05-15 11:35:08

标签: c callback functional-programming

我正在以这种方式实现回调函数:

typedef void (*callback)()

它的工作正常,我可以将参数传递给这样的回调:

void Call(int X){
   printf("Input: %d", X);
}
void PrintSomething(callback F){
   printf("Something");
   F(10);
}

但我无法摆脱我做错事的感觉。我的方法记忆安全吗?有没有其他好的方法来实现带有参数的回调函数?

2 个答案:

答案 0 :(得分:1)

只要您以某种方式确保实际参数与函数签名匹配,它就是安全的。如果您希望编译器为您检查它,您需要为每个签名定义一个单独的回调类型:

typedef void (*callback_ii)(int, int);
typedef void (*callback_d)(double);
typedef void (*callback_v)(void);

这与常规函数声明没有什么不同。您可以在头文件中声明您的函数,如下所示:

void PrintSomething();

但是你可以自己进行签名检查。

答案 1 :(得分:1)

我不认为你给出的代码会编译,因为回调是函数指针,它返回void并且不带参数但是在PrintSomething参数10中传递给F。

回到问题然后回调实现以正确的方式完成没有错。您为回调函数声明了一个签名,如返回值,参数和其他属性,然后注册客户端的回调和调用。

它是POSIX线程和其他线程库的作用。

由于