2012-01-04 23 views
1

このtypedefが何をしているのか理解してください。Cのtypedef関数の戻り値

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

ここに私の理解があります:1行目xyzはvoidを返し、引数としてvoidポインタをとる関数です。しかし、私はこのことを理解して2行目を解釈することはできません。

いずれの入力も可能です。

答えて

2

関数へのポインタをパラメータとし、struct xへのポインタを返すFUNCTIONという外部関数があります。

0

最初の行はxyzを、voidを返す関数の型とし、void*という1つの引数を取ることを定義しています。何もしないので、実際には名前dataを省略することができます。あなたが直接宣言することができますCには、生の関数型が存在しないので、実際にあなたがxyz * ptrを持っているよう

、あなただけの、xyzポインタを使用することができます。

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へのポインタを返す関数を宣言:

それのtypedefにポインタを含むことがより一般的です。

+0

これは、コードの2行目であるため、この質問には答えません。 – Archie

+0

@Archie:OK、2行目の説明を追加しました。 –