[net.lang.c] comparing structures: problems with unions

andrew@orca.UUCP (Andrew Klossner) (03/26/84)

	"Another solution would be to clear the unused parts of the
	union wherever a store is done.  In many cases (admittedly not
	all) this would be very cheap."

In some cases it can't be done at all:

	struct {
		union {char c; double d;} u;
		} structure;
	fill_char(pc) char *pc; {*pc = ~0;}
	main() {
		...
		fill_char(&(structure.u.c));
		...
		}

The code generated for "fill_char" has no way of knowing that the
character to which it's been given a pointer is a member of a larger
union, the excess of which must be cleared.

  -- Andrew Klossner   (decvax!tektronix!orca!andrew)      [UUCP]
                       (orca!andrew.tektronix@rand-relay)  [ARPA]