Listing 4

#include <stdio.h>
#include <stdlib.h>

#define SET 1
#define CLEAR 0
#define NUMELEM(a) (sizeof(a)/sizeof(a[O]))

void eh(void);
void cf0(void);    /* cleanup functions */
void cf1(void);
void cf2(void);
void cf3(void);

struct status_flags {
   unsigned char flag;
   void (*pfun)(void);
} handler[] = {
   {CLEAR, cf0},
   {CLEAR, cf1},
   {CLEAR, cf2},
   {CLEAR, Cf3}
};

main()
{
   atexit(eh);

   handler[1].flag = SET;
   handler[3].flag = SET;
}

void eh(void)
{
   int i;

   for (i = 0; i < NUMELEM(handler); i++) {
      if (handler[i].flag == SET)
         (*handler[i].pfun) ();
   }
}

void cf0(void)
{
   printf("Inside cf0\n");
}

...

void cf3(void)
{
   printf("Inside cf3\n");
}

Inside cf1
Inside cf3