System_002dspecific-Predefined-Macros.html 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <!-- Copyright (C) 1987-2023 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. A copy of
  7. the license is included in the
  8. section entitled "GNU Free Documentation License".
  9. This manual contains no Invariant Sections. The Front-Cover Texts are
  10. (a) (see below), and the Back-Cover Texts are (b) (see below).
  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.7, http://www.gnu.org/software/texinfo/ -->
  18. <head>
  19. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  20. <title>System-specific Predefined Macros (The C Preprocessor)</title>
  21. <meta name="description" content="System-specific Predefined Macros (The C Preprocessor)">
  22. <meta name="keywords" content="System-specific Predefined Macros (The C Preprocessor)">
  23. <meta name="resource-type" content="document">
  24. <meta name="distribution" content="global">
  25. <meta name="Generator" content="makeinfo">
  26. <link href="index.html" rel="start" title="Top">
  27. <link href="Index-of-Directives.html" rel="index" title="Index of Directives">
  28. <link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
  29. <link href="Predefined-Macros.html" rel="up" title="Predefined Macros">
  30. <link href="C_002b_002b-Named-Operators.html" rel="next" title="C++ Named Operators">
  31. <link href="Common-Predefined-Macros.html" rel="prev" title="Common Predefined Macros">
  32. <style type="text/css">
  33. <!--
  34. a.summary-letter {text-decoration: none}
  35. blockquote.indentedblock {margin-right: 0em}
  36. div.display {margin-left: 3.2em}
  37. div.example {margin-left: 3.2em}
  38. div.lisp {margin-left: 3.2em}
  39. kbd {font-style: oblique}
  40. pre.display {font-family: inherit}
  41. pre.format {font-family: inherit}
  42. pre.menu-comment {font-family: serif}
  43. pre.menu-preformatted {font-family: serif}
  44. span.nolinebreak {white-space: nowrap}
  45. span.roman {font-family: initial; font-weight: normal}
  46. span.sansserif {font-family: sans-serif; font-weight: normal}
  47. ul.no-bullet {list-style: none}
  48. -->
  49. </style>
  50. </head>
  51. <body lang="en">
  52. <span id="System_002dspecific-Predefined-Macros"></span><div class="header">
  53. <p>
  54. Next: <a href="C_002b_002b-Named-Operators.html" accesskey="n" rel="next">C++ Named Operators</a>, Previous: <a href="Common-Predefined-Macros.html" accesskey="p" rel="prev">Common Predefined Macros</a>, Up: <a href="Predefined-Macros.html" accesskey="u" rel="up">Predefined Macros</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index-of-Directives.html" title="Index" rel="index">Index</a>]</p>
  55. </div>
  56. <hr>
  57. <span id="System_002dspecific-Predefined-Macros-1"></span><h4 class="subsection">3.7.3 System-specific Predefined Macros</h4>
  58. <span id="index-system_002dspecific-predefined-macros"></span>
  59. <span id="index-predefined-macros_002c-system_002dspecific"></span>
  60. <span id="index-reserved-namespace"></span>
  61. <p>The C preprocessor normally predefines several macros that indicate what
  62. type of system and machine is in use. They are obviously different on
  63. each target supported by GCC. This manual, being for all systems and
  64. machines, cannot tell you what their names are, but you can use
  65. <code>cpp -dM</code> to see them all. See <a href="Invocation.html">Invocation</a>. All system-specific
  66. predefined macros expand to a constant value, so you can test them with
  67. either &lsquo;<samp>#ifdef</samp>&rsquo; or &lsquo;<samp>#if</samp>&rsquo;.
  68. </p>
  69. <p>The C standard requires that all system-specific macros be part of the
  70. <em>reserved namespace</em>. All names which begin with two underscores,
  71. or an underscore and a capital letter, are reserved for the compiler and
  72. library to use as they wish. However, historically system-specific
  73. macros have had names with no special prefix; for instance, it is common
  74. to find <code>unix</code> defined on Unix systems. For all such macros, GCC
  75. provides a parallel macro with two underscores added at the beginning
  76. and the end. If <code>unix</code> is defined, <code>__unix__</code> will be defined
  77. too. There will never be more than two underscores; the parallel of
  78. <code>_mips</code> is <code>__mips__</code>.
  79. </p>
  80. <p>When the <samp>-ansi</samp> option, or any <samp>-std</samp> option that
  81. requests strict conformance, is given to the compiler, all the
  82. system-specific predefined macros outside the reserved namespace are
  83. suppressed. The parallel macros, inside the reserved namespace, remain
  84. defined.
  85. </p>
  86. <p>We are slowly phasing out all predefined macros which are outside the
  87. reserved namespace. You should never use them in new programs, and we
  88. encourage you to correct older code to use the parallel macros whenever
  89. you find it. We don&rsquo;t recommend you use the system-specific macros that
  90. are in the reserved namespace, either. It is better in the long run to
  91. check specifically for features you need, using a tool such as
  92. <code>autoconf</code>.
  93. </p>
  94. <hr>
  95. <div class="header">
  96. <p>
  97. Next: <a href="C_002b_002b-Named-Operators.html" accesskey="n" rel="next">C++ Named Operators</a>, Previous: <a href="Common-Predefined-Macros.html" accesskey="p" rel="prev">Common Predefined Macros</a>, Up: <a href="Predefined-Macros.html" accesskey="u" rel="up">Predefined Macros</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index-of-Directives.html" title="Index" rel="index">Index</a>]</p>
  98. </div>
  99. </body>
  100. </html>