struct mumbletyfrog; extern struct mumbletyfrog *makefrog(void); extern void setcroaks(struct mumbletyfrog *, int);The caller would include the header file, and manipulate pointers to struct mumbletyfrog:
#include "mumbletyfrog.h" ... struct mumbletyfrog *frogp; frogp = makefrog(); setcroaks(frogp, 3); croaker(frogp);The code that defines the mumbletyfrog type, presumably in mumbletyfrog.c, actually defines the structure:
#include "mumbletyfrog.h"
struct mumbletyfrog
{
char *name;
int ncroaks;
};
struct mumbletyfrog *makefrog(void)
{
struct mumbletyfrog *frogp = malloc(sizeof(struct mumbletyfrog));
if(frogp == NULL)
return NULL;
frogp->name = NULL;
frogp->ncroaks = 0;
return frogp;
}
void setcroaks(struct mumbletyfrog *frogp, int n)
{
frogp->ncroaks = n;
}
void croaker(struct mumbletyfrog *frogp)
{
int i;
for(i = 0; i < frogp->ncroaks; i++)
printf("ribbet\n");
}
Another popular strategy is to use a typedef,
so that the keyword struct can be omitted;
see questions
2.1
and
2.2.
This page by Steve Summit // Copyright 1995-2004 // feedback