[net.sources] cpp macro hack: quoting

turner (02/24/83)

#N:ucbesvax:8400001:000:709
ucbesvax!turner    Feb 23 01:22:00 1983


/*
 * Does this work on your compiler?  The output should be as follows:

foo[0].name=hello, foo[0].val=1
foo[1].name=goodbye, foo[1].val=2

 * I would appreciate any and all responses to this question.  Basically,
 * I'm interested in the portability of these macro definitions.
 *
 * Anti-Copyright (~C) 1983, Michael Turner,
 */
#define QUOTE(f) \
"\
f\
"

#define str_sym(sym) QUOTE(sym), &sym

int hello = 1,
    goodbye = 2;

struct
    {
    char *	name;
    int *	val;
    } foo [2] =
	{
	str_sym(hello),
	str_sym(goodbye)
	};

#define printv(x)\
    printf("%s.name=%s, %s.val=%d\n",\
	    QUOTE(x),\
	    x.name,\
	    QUOTE(x),\
	    *(x.val))

main()
{
    printv(foo[0]);
    printv(foo[1]);
}