Making each module expose an interface Is this a good/correct way to write a robust C program?

//File1 =&gt; Module1.c

static int Fun(int);

struct{
int (*pFn)(int)
}Interface;

static int Fun(int){
//do something
}

Interface* Init(void)
{
  Interface *pInterface = malloc(sizeof(Interface));
  pInterface-&gt;pFn = Fun;
  return pInterface;
}

//File 2 
main()
{
  Interface *pInterface1 = Init();
  pInterface1-&gt;pFn(5);
}


My intention is to make each module expose an interface.  Give your thoughts.
You probably intended to write

typedef struct {
    int (*pFn)(int)
} Interface;

Use member names which are more descriptive than pFn. I hope that this was just as an example to post here.
Yes this approach can work well. I have worked on a bigger project where we used this OO-light approach for C by having an interface struct and each backend would fill it with it's own implementation.