You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

146 line
6.0KB

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <!-- Copyright (C) 1988-2020 Free Software Foundation, Inc.
  4. Permission is granted to copy, distribute and/or modify this document
  5. under the terms of the GNU Free Documentation License, Version 1.3 or
  6. any later version published by the Free Software Foundation; with the
  7. Invariant Sections being "Funding Free Software", the Front-Cover
  8. Texts being (a) (see below), and with the Back-Cover Texts being (b)
  9. (see below). A copy of the license is included in the section entitled
  10. "GNU Free Documentation License".
  11. (a) The FSF's Front-Cover Text is:
  12. A GNU Manual
  13. (b) The FSF's Back-Cover Text is:
  14. You have freedom to copy and modify this GNU Manual, like GNU
  15. software. Copies published by the Free Software Foundation raise
  16. funds for GNU development. -->
  17. <!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
  18. <head>
  19. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  20. <title>Cast to Union (Using the GNU Compiler Collection (GCC))</title>
  21. <meta name="description" content="Cast to Union (Using the GNU Compiler Collection (GCC))">
  22. <meta name="keywords" content="Cast to Union (Using the GNU Compiler Collection (GCC))">
  23. <meta name="resource-type" content="document">
  24. <meta name="distribution" content="global">
  25. <meta name="Generator" content="makeinfo">
  26. <link href="index.html#Top" rel="start" title="Top">
  27. <link href="Option-Index.html#Option-Index" rel="index" title="Option Index">
  28. <link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
  29. <link href="C-Extensions.html#C-Extensions" rel="up" title="C Extensions">
  30. <link href="Mixed-Declarations.html#Mixed-Declarations" rel="next" title="Mixed Declarations">
  31. <link href="Case-Ranges.html#Case-Ranges" rel="prev" title="Case Ranges">
  32. <style type="text/css">
  33. <!--
  34. a.summary-letter {text-decoration: none}
  35. blockquote.indentedblock {margin-right: 0em}
  36. blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
  37. blockquote.smallquotation {font-size: smaller}
  38. div.display {margin-left: 3.2em}
  39. div.example {margin-left: 3.2em}
  40. div.lisp {margin-left: 3.2em}
  41. div.smalldisplay {margin-left: 3.2em}
  42. div.smallexample {margin-left: 3.2em}
  43. div.smalllisp {margin-left: 3.2em}
  44. kbd {font-style: oblique}
  45. pre.display {font-family: inherit}
  46. pre.format {font-family: inherit}
  47. pre.menu-comment {font-family: serif}
  48. pre.menu-preformatted {font-family: serif}
  49. pre.smalldisplay {font-family: inherit; font-size: smaller}
  50. pre.smallexample {font-size: smaller}
  51. pre.smallformat {font-family: inherit; font-size: smaller}
  52. pre.smalllisp {font-size: smaller}
  53. span.nolinebreak {white-space: nowrap}
  54. span.roman {font-family: initial; font-weight: normal}
  55. span.sansserif {font-family: sans-serif; font-weight: normal}
  56. ul.no-bullet {list-style: none}
  57. -->
  58. </style>
  59. </head>
  60. <body lang="en">
  61. <a name="Cast-to-Union"></a>
  62. <div class="header">
  63. <p>
  64. Next: <a href="Mixed-Declarations.html#Mixed-Declarations" accesskey="n" rel="next">Mixed Declarations</a>, Previous: <a href="Case-Ranges.html#Case-Ranges" accesskey="p" rel="prev">Case Ranges</a>, Up: <a href="C-Extensions.html#C-Extensions" accesskey="u" rel="up">C Extensions</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
  65. </div>
  66. <hr>
  67. <a name="Cast-to-a-Union-Type"></a>
  68. <h3 class="section">6.31 Cast to a Union Type</h3>
  69. <a name="index-cast-to-a-union"></a>
  70. <a name="index-union_002c-casting-to-a"></a>
  71. <p>A cast to a union type is a C extension not available in C++. It looks
  72. just like ordinary casts with the constraint that the type specified is
  73. a union type. You can specify the type either with the <code>union</code>
  74. keyword or with a <code>typedef</code> name that refers to a union. The result
  75. of a cast to a union is a temporary rvalue of the union type with a member
  76. whose type matches that of the operand initialized to the value of
  77. the operand. The effect of a cast to a union is similar to a compound
  78. literal except that it yields an rvalue like standard casts do.
  79. See <a href="Compound-Literals.html#Compound-Literals">Compound Literals</a>.
  80. </p>
  81. <p>Expressions that may be cast to the union type are those whose type matches
  82. at least one of the members of the union. Thus, given the following union
  83. and variables:
  84. </p>
  85. <div class="smallexample">
  86. <pre class="smallexample">union foo { int i; double d; };
  87. int x;
  88. double y;
  89. union foo z;
  90. </pre></div>
  91. <p>both <code>x</code> and <code>y</code> can be cast to type <code>union foo</code> and
  92. the following assignments
  93. </p><div class="smallexample">
  94. <pre class="smallexample"> z = (union foo) x;
  95. z = (union foo) y;
  96. </pre></div>
  97. <p>are shorthand equivalents of these
  98. </p><div class="smallexample">
  99. <pre class="smallexample"> z = (union foo) { .i = x };
  100. z = (union foo) { .d = y };
  101. </pre></div>
  102. <p>However, <code>(union foo) FLT_MAX;</code> is not a valid cast because the union
  103. has no member of type <code>float</code>.
  104. </p>
  105. <p>Using the cast as the right-hand side of an assignment to a variable of
  106. union type is equivalent to storing in a member of the union with
  107. the same type
  108. </p>
  109. <div class="smallexample">
  110. <pre class="smallexample">union foo u;
  111. /* <span class="roman">&hellip;</span> */
  112. u = (union foo) x &equiv; u.i = x
  113. u = (union foo) y &equiv; u.d = y
  114. </pre></div>
  115. <p>You can also use the union cast as a function argument:
  116. </p>
  117. <div class="smallexample">
  118. <pre class="smallexample">void hack (union foo);
  119. /* <span class="roman">&hellip;</span> */
  120. hack ((union foo) x);
  121. </pre></div>
  122. <hr>
  123. <div class="header">
  124. <p>
  125. Next: <a href="Mixed-Declarations.html#Mixed-Declarations" accesskey="n" rel="next">Mixed Declarations</a>, Previous: <a href="Case-Ranges.html#Case-Ranges" accesskey="p" rel="prev">Case Ranges</a>, Up: <a href="C-Extensions.html#C-Extensions" accesskey="u" rel="up">C Extensions</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
  126. </div>
  127. </body>
  128. </html>