Q: Is there an automatic way to keep track of which field of a union is in use?
A: No. You can implement an explicitly ``tagged'' union yourself:
struct taggedunion { enum {UNKNOWN, INT, LONG, DOUBLE, POINTER} code; union { int i; long l; double d; void *p; } u; };You will have to make sure that the code field is always set appropriately when the union is written to; the compiler won't do any of this for you automatically. (C unions are not like Pascal variant records.)
References:
H&S Sec. 5.7.3 p. 143