我正在学习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;
}
有人可以解决这种情况吗?
答案 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;
不清楚你的代码应该达到什么目的,所以我无法真正帮助你。