Reputation: 3539
I need to reference a struct that's not yet defined because the struct actually conatins the typedef'd function prototype.
For example,
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;
What's the valid way to actually write this code/header ?
Upvotes: 7
Views: 9537
Reputation: 476940
Just forward declare the relevant types - and you can make the function pointer part of the 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;
Upvotes: 5
Reputation: 78903
Just forward declare your typedef
s
typedef struct X X;
typedef struct CallbackData CallbackData;
and then declare the struct
s later.
Upvotes: 5
Reputation: 791421
Yes, you can forward declare the struct and use it in the declaration of MyCallbackFunction
where you don't need it to be a complete type.
struct X;
typedef int (MyCallbackFunction)(struct X * x, void * ctx);
Upvotes: 0