cottrell@nbs-vms.ARPA (COTTRELL, JAMES) (08/30/85)
/* In article <368@persci.UUCP> roman@persci.UUCP writes: > Either I'm missing the perfectly obvious or I've found something > that's impossible to declare in C, even though it makes sense. I'm > trying to implement a simple finite state machine with states > represented by C functions. Each state function would accept some > input value as an argument and return a pointer to the function > implementing the next state... Cheat! Declare your variable as a pointer to funxion returning int (or char (or void) pointer for sticklers) and then use casts. Saves a lot of headaches trying to figure out all those types. With char or void pointers, there ought to be a portable way. typedef int (*PFI)(); typedef char *(*PFCP)(); /* for portability sticklers */ typedef void *(*PFVP)(); /* if available */ int other(); int init(); /* initial func */ PFI state = init; /* state var */ init(arg) { state = other; /* no problem to set directly */ ... return((int)state); /* to return we must cast */ ... state = (PFI)other(arg);/* must cast to assign */ ... (*state)(arg); /* can be called directly */ ... while (state = (PFI)(*state)(arg)); /* until no more funx */ } Once in a while you get shown the light In the strangest of places if you look at it right. jim cottrell@nbs */ ------