Keeping tables in step (Was: Re: How to force cpp to abort?)
Dean Inada
dmi at peregrine.peregrine.com
Sun Aug 19 14:44:22 AEST 1990
#if 0
In article <3579 at goanna.cs.rmit.oz.au> ok at goanna.cs.rmit.oz.au (Richard A. O'Keefe) writes:
> #File: mktable.demo
>
> EntryCt; int whence; int whither; char *name
>
> Butcher; 1; 2; "Butcher"
> Baker; 1; 3; "Baker"
> Bellman; 2; 3; "Bellman"
> Boojum; 0; 0; NULL
> #End: mktable.demo
>
>Running the command
>
> awk -F";" -f mkheader.awk mktable.demo
>
>produces
>
> /* From mktable.demo */
> #define Butcher 0
> #define Baker 1
> #define Bellman 2
> #define Boojum 3
> #define EntryCt 4
> extern int whence[4];
> extern int whither[4];
> extern char *name[4];
> /* End mktable.demo */
#endif
#include <stdio.h>
#define table \
x(Butcher, 1, 2, "Butcher")\
x(Baker, 1, 3, "Baker")\
x(Bellman, 2, 3, "Bellman")\
x(Boojum, 0, 0, NULL)\
/*enddefine*/
enum EntryCt {
#define x(entry,whence,whither,name) entry,
table
EntryCt
#undef x
};
int whence[]={
#define x(entry,whence,whither,name) whence,
table
#undef x
};
int whither[]={
#define x(entry,whence,whither,name) whither,
table
#undef x
};
char *name[]={
#define x(entry,whence,whither,name) name,
table
#undef x
};
main()
{
#define x(en,wn,wr,nm) \
printf("entry=%d, whence=%d, whither=%d, name=%s\r\n",\
en, whence[en], wr, name[en]);
table
#undef x
}
More information about the Comp.lang.c
mailing list