source: public/doc/gnu-c/Unions.html@ 02598c2

Last change on this file since 02598c2 was 02598c2, checked in by Mikhail Kirillov <w96k@…>, on Oct 6, 2022 at 12:36:29 PM

Add gnu-c

  • Property mode set to 100644
File size: 5.9 KB
Line 
1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2<html>
3<!-- Copyright (C) 2022 Richard Stallman and Free Software Foundation, Inc.
4
5(The work of Trevis Rothwell and Nelson Beebe has been assigned or
6licensed to the FSF.)
7
8Permission is granted to copy, distribute and/or modify this document
9under the terms of the GNU Free Documentation License, Version 1.3 or
10any later version published by the Free Software Foundation; with the
11Invariant Sections being "GNU General Public License," with the
12Front-Cover Texts being "A GNU Manual," and with the Back-Cover
13Texts as in (a) below. A copy of the license is included in the
14section entitled "GNU Free Documentation License."
15
16(a) The FSF's Back-Cover Text is: "You have the freedom to copy and
17modify this GNU manual. Buying copies from the FSF supports it in
18developing GNU and promoting software freedom." -->
19<!-- Created by GNU Texinfo 6.7, http://www.gnu.org/software/texinfo/ -->
20<head>
21<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
22<title>Unions (GNU C Language Manual)</title>
23
24<meta name="description" content="Unions (GNU C Language Manual)">
25<meta name="keywords" content="Unions (GNU C Language Manual)">
26<meta name="resource-type" content="document">
27<meta name="distribution" content="global">
28<meta name="Generator" content="makeinfo">
29<link href="index.html" rel="start" title="Top">
30<link href="Symbol-Index.html" rel="index" title="Symbol Index">
31<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
32<link href="Structures.html" rel="up" title="Structures">
33<link href="Packing-With-Unions.html" rel="next" title="Packing With Unions">
34<link href="Structure-Assignment.html" rel="prev" title="Structure Assignment">
35<style type="text/css">
36<!--
37a.summary-letter {text-decoration: none}
38blockquote.indentedblock {margin-right: 0em}
39div.display {margin-left: 3.2em}
40div.example {margin-left: 3.2em}
41div.lisp {margin-left: 3.2em}
42kbd {font-style: oblique}
43pre.display {font-family: inherit}
44pre.format {font-family: inherit}
45pre.menu-comment {font-family: serif}
46pre.menu-preformatted {font-family: serif}
47span.nolinebreak {white-space: nowrap}
48span.roman {font-family: initial; font-weight: normal}
49span.sansserif {font-family: sans-serif; font-weight: normal}
50ul.no-bullet {list-style: none}
51-->
52</style>
53
54
55</head>
56
57<body lang="en">
58<span id="Unions"></span><div class="header">
59<p>
60Next: <a href="Packing-With-Unions.html" accesskey="n" rel="next">Packing With Unions</a>, Previous: <a href="Structure-Assignment.html" accesskey="p" rel="prev">Structure Assignment</a>, Up: <a href="Structures.html" accesskey="u" rel="up">Structures</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Symbol-Index.html" title="Index" rel="index">Index</a>]</p>
61</div>
62<hr>
63<span id="Unions-1"></span><h3 class="section">15.13 Unions</h3>
64<span id="index-unions"></span>
65<span id="index-union"></span>
66
67<p>A <em>union type</em> defines alternative ways of looking at the same
68piece of memory. Each alternative view is defined with a data type,
69and identified by a name. A union definition looks like this:
70</p>
71<div class="example">
72<pre class="example">union <var>name</var>
73{
74 <var>alternative declarations</var><span class="roman">&hellip;</span>
75};
76</pre></div>
77
78<p>Each alternative declaration looks like a structure field declaration,
79except that it can&rsquo;t be a bit field. For instance,
80</p>
81<div class="example">
82<pre class="example">union number
83{
84 long int integer;
85 double float;
86}
87</pre></div>
88
89<p>lets you store either an integer (type <code>long int</code>) or a floating
90point number (type <code>double</code>) in the same place in memory. The
91length and alignment of the union type are the maximum of all the
92alternatives&mdash;they do not have to be the same. In this union
93example, <code>double</code> probably takes more space than <code>long int</code>,
94but that doesn&rsquo;t cause a problem in programs that use the union in the
95normal way.
96</p>
97<p>The members don&rsquo;t have to be different in data type. Sometimes
98each member pertains to a way the data will be used. For instance,
99</p>
100<div class="example">
101<pre class="example">union datum
102{
103 double latitude;
104 double longitude;
105 double height;
106 double weight;
107 int continent;
108}
109</pre></div>
110
111<p>This union holds one of several kinds of data; most kinds are floating
112points, but the value can also be a code for a continent which is an
113integer. You <em>could</em> use one member of type <code>double</code> to
114access all the values which have that type, but the different member
115names will make the program clearer.
116</p>
117<p>The alignment of a union type is the maximum of the alignments of the
118alternatives. The size of the union type is the maximum of the sizes
119of the alternatives, rounded up to a multiple of the alignment
120(because every type&rsquo;s size must be a multiple of its alignment).
121</p>
122<p>All the union alternatives start at the address of the union itself.
123If an alternative is shorter than the union as a whole, it occupies
124the first part of the union&rsquo;s storage, leaving the last part unused
125<em>for that alternative</em>.
126</p>
127<p><strong>Warning:</strong> if the code stores data using one union alternative
128and accesses it with another, the results depend on the kind of
129computer in use. Only wizards should try to do this. However, when
130you need to do this, a union is a clean way to do it.
131</p>
132<p>Assignment works on any union type by copying the entire value.
133</p>
134<hr>
135<div class="header">
136<p>
137Next: <a href="Packing-With-Unions.html" accesskey="n" rel="next">Packing With Unions</a>, Previous: <a href="Structure-Assignment.html" accesskey="p" rel="prev">Structure Assignment</a>, Up: <a href="Structures.html" accesskey="u" rel="up">Structures</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Symbol-Index.html" title="Index" rel="index">Index</a>]</p>
138</div>
139
140
141
142</body>
143</html>
Note: See TracBrowser for help on using the repository browser.