Unique member names in structs
John Gilmore
gnu at sun.uucp
Thu Dec 8 21:03:38 AEST 1983
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).
More information about the Comp.lang.c
mailing list