2016-05-13 134 views
0

我正在学习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

你能描述一下这个问题吗? (编译器/链接器错误,奇怪的行为...) – purplepsycho

+1

你可以发布[MCVE](http://stackoverflow.com/help/mcve)吗? – purplepsycho

+1

在维基百科文章中,有一个将结构传递给[callback](https://en.wikipedia.org/wiki/Callback_(computer_programming))的C示例。 – user3078414

回答

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; 

这有点不清楚你的代码应该实现的,虽然,所以我无法进一步帮助你。

相关问题