Label-Attributes.html 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  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-2017 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 5.2, http://www.gnu.org/software/texinfo/ -->
  18. <head>
  19. <title>Using the GNU Compiler Collection (GCC): Label Attributes</title>
  20. <meta name="description" content="Using the GNU Compiler Collection (GCC): Label Attributes">
  21. <meta name="keywords" content="Using the GNU Compiler Collection (GCC): Label Attributes">
  22. <meta name="resource-type" content="document">
  23. <meta name="distribution" content="global">
  24. <meta name="Generator" content="makeinfo">
  25. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  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="Enumerator-Attributes.html#Enumerator-Attributes" rel="next" title="Enumerator Attributes">
  31. <link href="x86-Type-Attributes.html#x86-Type-Attributes" rel="prev" title="x86 Type Attributes">
  32. <style type="text/css">
  33. <!--
  34. a.summary-letter {text-decoration: none}
  35. blockquote.smallquotation {font-size: smaller}
  36. div.display {margin-left: 3.2em}
  37. div.example {margin-left: 3.2em}
  38. div.indentedblock {margin-left: 3.2em}
  39. div.lisp {margin-left: 3.2em}
  40. div.smalldisplay {margin-left: 3.2em}
  41. div.smallexample {margin-left: 3.2em}
  42. div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
  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.nocodebreak {white-space:nowrap}
  54. span.nolinebreak {white-space:nowrap}
  55. span.roman {font-family:serif; font-weight:normal}
  56. span.sansserif {font-family:sans-serif; font-weight:normal}
  57. ul.no-bullet {list-style: none}
  58. -->
  59. </style>
  60. </head>
  61. <body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
  62. <a name="Label-Attributes"></a>
  63. <div class="header">
  64. <p>
  65. Next: <a href="Enumerator-Attributes.html#Enumerator-Attributes" accesskey="n" rel="next">Enumerator Attributes</a>, Previous: <a href="Type-Attributes.html#Type-Attributes" accesskey="p" rel="prev">Type Attributes</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>
  66. </div>
  67. <hr>
  68. <a name="Label-Attributes-1"></a>
  69. <h3 class="section">6.34 Label Attributes</h3>
  70. <a name="index-Label-Attributes"></a>
  71. <p>GCC allows attributes to be set on C labels. See <a href="Attribute-Syntax.html#Attribute-Syntax">Attribute Syntax</a>, for
  72. details of the exact syntax for using attributes. Other attributes are
  73. available for functions (see <a href="Function-Attributes.html#Function-Attributes">Function Attributes</a>), variables
  74. (see <a href="Variable-Attributes.html#Variable-Attributes">Variable Attributes</a>), enumerators (see <a href="Enumerator-Attributes.html#Enumerator-Attributes">Enumerator Attributes</a>),
  75. statements (see <a href="Statement-Attributes.html#Statement-Attributes">Statement Attributes</a>), and for types
  76. (see <a href="Type-Attributes.html#Type-Attributes">Type Attributes</a>).
  77. </p>
  78. <p>This example uses the <code>cold</code> label attribute to indicate the
  79. <code>ErrorHandling</code> branch is unlikely to be taken and that the
  80. <code>ErrorHandling</code> label is unused:
  81. </p>
  82. <div class="smallexample">
  83. <pre class="smallexample">
  84. asm goto (&quot;some asm&quot; : : : : NoError);
  85. /* This branch (the fall-through from the asm) is less commonly used */
  86. ErrorHandling:
  87. __attribute__((cold, unused)); /* Semi-colon is required here */
  88. printf(&quot;error\n&quot;);
  89. return 0;
  90. NoError:
  91. printf(&quot;no error\n&quot;);
  92. return 1;
  93. </pre></div>
  94. <dl compact="compact">
  95. <dt><code>unused</code></dt>
  96. <dd><a name="index-unused-label-attribute"></a>
  97. <p>This feature is intended for program-generated code that may contain
  98. unused labels, but which is compiled with <samp>-Wall</samp>. It is
  99. not normally appropriate to use in it human-written code, though it
  100. could be useful in cases where the code that jumps to the label is
  101. contained within an <code>#ifdef</code> conditional.
  102. </p>
  103. </dd>
  104. <dt><code>hot</code></dt>
  105. <dd><a name="index-hot-label-attribute"></a>
  106. <p>The <code>hot</code> attribute on a label is used to inform the compiler that
  107. the path following the label is more likely than paths that are not so
  108. annotated. This attribute is used in cases where <code>__builtin_expect</code>
  109. cannot be used, for instance with computed goto or <code>asm goto</code>.
  110. </p>
  111. </dd>
  112. <dt><code>cold</code></dt>
  113. <dd><a name="index-cold-label-attribute"></a>
  114. <p>The <code>cold</code> attribute on labels is used to inform the compiler that
  115. the path following the label is unlikely to be executed. This attribute
  116. is used in cases where <code>__builtin_expect</code> cannot be used, for instance
  117. with computed goto or <code>asm goto</code>.
  118. </p>
  119. </dd>
  120. </dl>
  121. <hr>
  122. <div class="header">
  123. <p>
  124. Next: <a href="Enumerator-Attributes.html#Enumerator-Attributes" accesskey="n" rel="next">Enumerator Attributes</a>, Previous: <a href="Type-Attributes.html#Type-Attributes" accesskey="p" rel="prev">Type Attributes</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>
  125. </div>
  126. </body>
  127. </html>