2012-01-04 107 views
1

請幫我理解這個typedef在做什麼?typedef函數返回值C

typedef void (xyz) (void *data); 
extern struct x* FUNCTION(xyz *ptr); 

這是我的理解:在第1行xyz是一個函數返回void並將void指針作爲參數。但我不能用這種理解來解釋第二行。

任何輸入是可觀的。

回答

2

有一個稱爲FUNCTION的外部函數,它將一個指針指向一個xyz函數作爲參數,並返回一個指向struct x的指針。

0

第一行將xyz定義爲返回void並帶有void*類型的一個參數的函數的類型。您實際上可以省略名稱data,因爲它什麼都不做。

由於在C中沒有原函數類型,你可以直接聲明,則只能使用指針xyz,因爲你確實有xyz * ptr

更常見的是,包括在所述的typedef指針:

typedef void (*fptr)(void*); 

void call(fptr f, void * arg) { f(arg); } 

void some_function(void * data); // whatever 

int main() 
{ 
    void * p = malloc(8); 
    call(some_function, p); 
} 

第二行聲明瞭一個函數,它接受一個xyz*作爲參數並返回一個指向struct x,與外部連接。

+0

這並不回答這個問題,因爲它是關於代碼的第二行。 – Archie 2012-01-04 19:57:18

+0

@Archie:好的,我添加了第二行的解釋。 – 2012-01-04 20:31:54