Node:Using unions, Previous:Declaration of unions, Up:union
Using unions
One way to tell what type of member is currently stored in the union
is to maintain a flag variable for each union.  This can be done easily with
enumerated data.  For example, for the int_or_float type,
we might want an associated enumerated type like this:
enum which_member
{
  INT,
  FLOAT
};
Notice that we used all-uppercase letters for the enumerated values. 
We would have received a syntax error if we had actually used the
C keywords int and float.
Associated union and enumerated variables can now be declared in pairs:
union int_or_float my_union1; enum which_member my_union_status1;
Handling union members is now straightforward.  For example:
switch (my_union_status1)
  {
  case INT:
    my_union1.int_member += 5;
    break;
  case FLOAT:
    my_union1.float_member += 23.222333;
    break;
  }
These variables could even be grouped into a structure for ease of use:
struct multitype
{
    union int_or_float number;
    enum which_member status;
};
struct multitype my_multi;
You would then make assignments to the members of this structure in pairs:
my_multi.number.int_member = 5; my_multi.status = INT;