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

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;
  case FLOAT:
    my_union1.float_member += 23.222333;

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;