10

例:関数(関数(that ...)とintを受け取る)とintを受け取る関数。

typedef void(*Func)(void (*)(void (*)(...), int), int);

どこで再帰的に爆発し(...)ます。これができない根本的な理由はありますか、それとも別の構文がありますか?キャストなしでも可能だと私には思えます。私は本当にディスパッチテーブルを渡そうとしていますが、この1つのタイプだけを渡すことができればそれを理解できました。

4

2 に答える 2

10

関数ポインタを構造体でラップできます。

struct fnptr_struct;
typedef void (*fnptr)(struct fnptr_struct *);
struct fnptr_struct {
  fnptr fp;
};

これがキャスティングの改善かどうかはわかりません。Cでは、使用する前に型を定義する必要があり、typedefの不透明な構文がないため、構造体なしでは不可能だと思います。

于 2009-05-03T05:08:44.377 に答える
6

直接行うことは不可能です。Daveが提案したように、唯一のオプションは、関数ポインター引数に未指定の引数を受け入れるようにするか、関数ポインターを含む構造体へのポインターを受け入れることです。

// Define fnptr as a pointer to a function returning void, and which takes one
// argument of type 'pointer to a function returning void and taking
// an unspecified number of parameters of unspecified types'
typedef void (*fnptr)(void (*)());
于 2009-05-03T05:28:32.723 に答える