home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The C Users' Group Library 1994 August
/
wc-cdrom-cusersgrouplibrary-1994-08.iso
/
listings
/
v_08_03
/
8n03020a
< prev
next >
Wrap
Text File
|
1990-03-20
|
2KB
|
85 lines
*****Listing 2*****
#include <stdio.h>
#include <stdlib.h>
void prochar(void *parg);
void proint(void *parg);
void prolong(void *parg);
void prodouble(void *parg);
void pronone(void *parg);
/* structure type flag values */
#define TYPENONE 0 /* Not pointing at an object */
#define TYPECHAR 1 /* char */
#define TYPEINT 2 /* int */
#define TYPELONG 3 /* long */
#define TYPEDOUBLE 4 /* double */
struct node {
struct node *pfwd; /* forward ptr */
struct node *pbwd; /* backward ptr */
void *pobject; /* ptr to object */
unsigned int objtype; /* indicate object type */
};
main()
{
char c = 'A';
int i = 10;
long int l = 123456;
double d = 123.45;
static void (*funtable[])(void *parg) = {
pronone,
prochar,
proint,
prolong,
prodouble
};
struct node *pnode;
pnode = malloc(sizeof(struct node));
/* let's point to a double */
pnode->pobject = &d;
pnode->objtype = TYPEDOUBLE;
pnode->pfwd = NULL;
pnode->pbwd = NULL;
/* at a later point, let's process the object to which we point */
(*funtable[pnode->objtype])(pnode->pobject);
}
/* processing functions */
void prochar(void *parg)
{
printf("char: %c\n", *(char *)parg);
}
void proint(void *parg)
{
printf("int: %d\n", *(int *)parg);
}
void prolong(void *parg)
{
printf("long: %ld\n", *(long *)parg);
}
void prodouble(void *parg)
{
printf("double: %f\n", *(double *)parg);
}
void pronone(void *parg)
{
printf("none:\n");
}