[net.bugs.2bsd] Unique member names in structs

gnu@sun.uucp (John Gilmore) (12/08/83)

The other advantage to unique member names (besides portability to V7
and minor readability) is that you can substitute them with #define's.
It's a royal pain to try to change a nonunique member name (which is
why all the V7 people complain when we use them) -- it has to be done
manually.

While we're almost on the subject, does anybody have a better
workaround for getting rid of the "extra member name" required when
making a union?  e.g.

	struct foo {
		char *name;
		union {
			int i;
			float f;
		} u;
	} node;

You can't talk about "node.i" or "node.f", you have to say "node.u.i".
I find this a royal pain and end up doing this:

	struct foo {
		char *name;
		union {
			int u_i;
			float u_f;
		} u;
#define i u.u_i
#define f u.u_f
	} node;

Then I can say "node.i" and cpp turns it into "node.u.u_i" which works.
However, "i" and "f" have to be unique in the whole program, since cpp
doesn't know about scope (or that they only apply within struct foo's).