如何将结构作为参数传递给回调函数

时间:2016-05-13 09:57:02

标签: c callback

我正在学习C并尝试将结构传递给回调函数。通过在线资源但无法通过结构回调功能。这是我的代码。

// myvariables.h

struct callbackStruct
{
 int a;
 int b;
 int c;
};
extern struct callbackStruct callbackStructObject;
typedef void (*callback)(struct callbackStruct);
extern void callback_reg(callback pointerRefCallback);

// Operations.c

struct callbackStruct callbackStructObject;

void callback_reg(callback pointerRefCallback) {

 (*pointerRefCallback)(callbackStructObject);

}

// main.c

struct callbackStruct myCallbackStruct1;
void my_callback(struct callbackStruct myCallbackStruct) {

 printf("A value:%d" + myCallbackStruct.a);

}

int  main()
{
 callback ptr_my_callback = my_callback(myCallbackStruct1);   
     callback_reg(ptr_my_callback);  
 return 0;
}

有人可以解决这种情况吗?

1 个答案:

答案 0 :(得分:0)

类型callback是函数指针类型,例如该类型的变量是指向接受struct callbackStruct作为单个参数的函数的指针:

typedef void (*callback)(struct callbackStruct);

所以当你写(主要)时:

// ...
  callback ptr_my_callback = // HERE
// ...

HERE处的表达式必须是具有正确签名的函数的地址。你写道:

my_callback(myCallbackStruct1);

由于my_callback是一个不返回任何内容的函数(void)而上述表达式调用此函数,因此表达式

  callback ptr_my_callback = my_callback(yCallbackStruct1);

形式不完善(从语法上讲,以及从类型系统的角度来看)。

假设my_callback是您想要作为回调的函数,您需要将其地址存储在指针ptr_my_callback中:

  callback ptr_my_callback = &my_callback;

不清楚你的代码应该达到什么目的,所以我无法真正帮助你。