предварительное объявление структуры в C?
#include <stdio.h>
struct context;
struct funcptrs{
void (*func0)(context *ctx);
void (*func1)(void);
};
struct context{
funcptrs fps;
};
void func1 (void) { printf( "1n" ); }
void func0 (context *ctx) { printf( "0n" ); }
void getContext(context *con){
con=?; // please fill this with a dummy example so that I can get this working. Thanks.
}
int main(int argc, char *argv[]){
funcptrs funcs = { func0, func1 };
context *c;
getContext(c);
c->fps.func0(c);
getchar();
return 0;
}
Я что-то пропустил. Пожалуйста, помогите мне исправить это. Спасибо.
2 ответов
попробуй такое
#include <stdio.h>
struct context;
struct funcptrs{
void (*func0)(struct context *ctx);
void (*func1)(void);
};
struct context{
struct funcptrs fps;
};
void func1 (void) { printf( "1\n" ); }
void func0 (struct context *ctx) { printf( "0\n" ); }
void getContext(struct context *con){
con->fps.func0 = func0;
con->fps.func1 = func1;
}
int main(int argc, char *argv[]){
struct context c;
c.fps.func0 = func0;
c.fps.func1 = func1;
getContext(&c);
c.fps.func0(&c);
getchar();
return 0;
}
структура (без typedef) часто должна (или должна) быть с ключевым словом struct при использовании.
struct A; // forward declaration
void function( struct A *a ); // using the 'incomplete' type only as pointer
если вы набрали свою структуру, вы можете оставить ключевое слово struct.
typedef struct A A; // forward declaration *and* typedef
void function( A *a );
обратите внимание, что законно использовать имя структуры
попробуйте изменить объявление forward на это в своем коде:
typedef struct context context;
было бы более читаемым добавить суффикс, чтобы указать имя структуры и имя типа:
typedef struct context_s context_t;