Next: Structure Constructors, Previous: Packing With Unions, Up: Structures [Contents][Index]
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:
union foo u; 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);