Search code examples
cstructdeclarationforward-declaration

forward declaration of a struct in C?


#include <stdio.h>

struct context;

struct funcptrs{
  void (*func0)(context *ctx);
  void (*func1)(void);
};

struct context{
    funcptrs fps;
}; 

void func1 (void) { printf( "1\n" ); }
void func0 (context *ctx) { printf( "0\n" ); }

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;
}

I am missing something here. How to fix this?


Solution

  • Try this

    #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;
    }