2016-05-13 186 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; 

這有點不清楚你的代碼應該實現的,雖然,所以我無法進一步幫助你。

相關問題