2011-09-30 43 views
1

這個函數原型是怎麼回事?顯然帶有某種強制類型轉換的空參數是混亂...C-奇怪的原型參數

int *my_func(my_struct *m, void (*m_op)(my_struct *v, void arg)); 
+3

在你最喜歡的C語言書中查找「函數指針」。 –

+0

http://cdecl.org –

回答

10

的第二個參數的功能my_func是指向不返回值(void)的功能,但它有兩個參數,一個my_struct指針和...和(無效)void。後者應該可能是void *arg;您不能擁有void類型的變量或參數。就目前來看,代碼不應該編譯。

1

該原型聲明函數my_func,返回int *。它有兩個參數,第一個是my_struct *,第二個是奇怪類型void (*)(my_struct *, void)。這意味着第二個參數是一個指向函數的指針,該函數返回void並帶有2個參數本身,指向my_structvoid(我認爲這是一個錯字,它需要void *)。

0

我的建議 - 總是嘗試將聲明拆分成更小的聲明 - 在這種情況下,代碼將更具可讀性。在這種情況下,你可以重新寫代碼:

typedef struct {} my_struct; 

typedef void (* m_op_function)(my_struct * v, void * arg); 

int * my_func(my_struct * m, m_op_function f); 

正如大家說 - 這幾乎是99.99%錯字這裏就以m_op_function-有可能第二個參數void* - 這樣就可以傳遞任何指針它 - 它是(char*), (int*), (my_struct*),或其他任何東西。只需簡單地投射指針。

0

This little article解釋瞭如何解析螺旋狀運動中的C聲明。相反,構建是完成的。