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