Next: , Previous: , Up: Structures [Contents][Index]


15.16 Cast to a Union Type

In GNU C, you can explicitly cast any of the alternative types to the union type; for instance,

(union eight_bytes) (long long) 5

makes a value of type union eight_bytes which gets its contents through the alternative named big_int_elt.

The value being cast must exactly match the type of the alternative, so this is not valid:

(union eight_bytes) 5 /* Error! 5 is int. */

A cast to union type looks like any other cast, except that the type specified is a union type. You can specify the type either with union tag or with a typedef name (see Defining Typedef Names).

Using the cast as the right-hand side of an assignment to a variable of union type is equivalent to storing in an alternative of the union:

/* Define the union foo. */
union foo { int i; double d; };
/* Declare the union-valued variable, u. */
union foo u;
int x; double y;
u = (union foo) x means u.i = x
u = (union foo) y means u.d = y

You can also use the union cast as a function argument:

void hack (union foo);

hack ((union foo) x);

AltStyle によって変換されたページ (->オリジナル) /