C typedef函数原型,结构在定义之前尝试引用。

时间:2011-07-30 22:17:11

标签: c struct

我需要引用一个尚未定义的结构,因为struct实际上包含了typedef'd函数原型。

例如,

typedef int (MyCallbackFunction)(X * x, void * ctx);

typedef struct CallbackData {
  MyCallbackFunction * callback;
  void * ctx;
} CallbackData;

typedef struct X {
  char a;
  int b;
  int c;
  double d;

  CallbackData e;
} X;

实际编写此代码/标头的有效方法是什么?

3 个答案:

答案 0 :(得分:5)

只需转发声明您的typedef

typedef struct X X;
typedef struct CallbackData CallbackData;

然后稍后宣布struct

答案 1 :(得分:4)

只需向前声明相关类型 - 您可以将函数指针作为typedef的一部分:

struct X_;

typedef int (*MyCallbackFunction)(struct X_ * x, void * ctx);

typedef struct CallbackData_ {
  MyCallbackFunction callback;
  void * ctx;
} CallbackData;

typedef struct X_ {
  char a;
  int b;
  int c;
  double d;

  CallbackData e;
} X;

答案 2 :(得分:0)

是的,你可以转发声明结构并在MyCallbackFunction的声明中使用它,你不需要它就是一个完整的类型。

struct X;
typedef int (MyCallbackFunction)(struct X * x, void * ctx);