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: