Pascal, C, Modula-2, Ada and other languages
have variant records (C's union type):
17#17
Depending on the tag value R1 has
a real, integer, or char field.
The size of a variant part is the max of
the sizes of its constituent fields.
In order to build recursive structures, most
languages allow some way of declaring
recursive types. These are necessary
in order to construct linked structures
such as lists and trees:
19#19
Note that P is declared before its use.
Languages such as Pascal and C don't allow forward
declarations, but make an exception for pointers.