4

次のように、C で構造体とコールバック関数の型を定義する必要があります。

typedef void (*callback)(struct XYZ* p);

struct {
    int a;
    int b;
    callback cb;
} XYZ;

各定義が他の定義を必要とするため、このコードはコンパイルされません。つまり、コールバック定義が最初に来ると、構造体を定義する必要があるため、コンパイルされません。同様に、構造体が最初に定義されている場合は、コールバックを定義する必要があります。これはばかげた質問かもしれませんが、そのような問題を解決する明確な方法はありますか?

現在、私の考えは、コールバック引数として void * を使用し、それを型キャストして、コールバック内で XYZ を構造化することです。何か案は?

4

2 に答える 2

10

struct関数の前に (まだ定義せずに) を宣言しますtypedef

struct XYZ;

typedef void (*callback)(struct XYZ* p);

struct XYZ { // also fixed an error where your struct had no name
    int a;
    int b;
    callback cb;
};

関数プロトタイプを宣言し、その定義の前に呼び出すことに似ています。

于 2013-10-31T11:13:13.480 に答える