このtypedefが何をしているのか理解してください。Cのtypedef関数の戻り値
typedef void (xyz) (void *data);
extern struct x* FUNCTION(xyz *ptr);
ここに私の理解があります:1行目xyzはvoidを返し、引数としてvoidポインタをとる関数です。しかし、私はこのことを理解して2行目を解釈することはできません。
いずれの入力も可能です。
このtypedefが何をしているのか理解してください。Cのtypedef関数の戻り値
typedef void (xyz) (void *data);
extern struct x* FUNCTION(xyz *ptr);
ここに私の理解があります:1行目xyzはvoidを返し、引数としてvoidポインタをとる関数です。しかし、私はこのことを理解して2行目を解釈することはできません。
いずれの入力も可能です。
関数へのポインタをパラメータとし、struct x
へのポインタを返すFUNCTION
という外部関数があります。
最初の行は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にポインタを含むことがより一般的です。
これは、コードの2行目であるため、この質問には答えません。 – Archie
@Archie:OK、2行目の説明を追加しました。 –