top/contents search
For example, you might create this header file, "mumbletyfrog.h", for an abstract type mumbletyfrog:
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.

back


contents search
about this FAQ list   about eskimo   search   feedback   copyright

Hosted by Eskimo North