Home Segments Index Top Previous Next

451: Mainline

To tell C to allow enough space for the largest of several different object types, you must define a union. A union is similar to a structure in that a union is a user-defined data type that you define in terms of a collection of typed structure variables. Unlike a structure, however, a union accommodates only one object at any one time. When you create an object belonging to a union, the space reserved is just that required to hold an object of the largest type that appears in the specification, rather than that required to hold a collection of objects.

Suppose, for example, that you define a trade to be the union of a stock_trade and bond_trade. Then when you create a trade object, C reserves enough space to hold either a stock_trade or a bond_trade, but not both. The details of space allocation are, as usual, somewhat implementation dependent, but the following arrangement is likely:

            *-- stock_trade object inside a trade_union object 
            | 
            |                       *-- Unoccupied space 
            v                       v 
 ------------------------------- ------- 
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* 
| | | | | | | | | | | | | | | | | | | | | 
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* 
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* 
| | | | | | | | | | | | | | | | | | | | | 
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*       
 --------------------------------------- 
             ^ 
             | 
             *-- bond_trade object inside a trade_union object