我需要引用一个尚未定义的结构,因为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;
实际编写此代码/标头的有效方法是什么?
答案 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);