System_002dspecific-Predefined-Macros.html 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  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-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. 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 5.2, http://www.gnu.org/software/texinfo/ -->
  18. <head>
  19. <title>The C Preprocessor: System-specific Predefined Macros</title>
  20. <meta name="description" content="The C Preprocessor: System-specific Predefined Macros">
  21. <meta name="keywords" content="The C Preprocessor: System-specific Predefined Macros">
  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="Index-of-Directives.html#Index-of-Directives" 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#Predefined-Macros" rel="up" title="Predefined Macros">
  30. <link href="C_002b_002b-Named-Operators.html#C_002b_002b-Named-Operators" rel="next" title="C++ Named Operators">
  31. <link href="Common-Predefined-Macros.html#Common-Predefined-Macros" rel="prev" title="Common Predefined Macros">
  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="System_002dspecific-Predefined-Macros"></a>
  63. <div class="header">
  64. <p>
  65. Next: <a href="C_002b_002b-Named-Operators.html#C_002b_002b-Named-Operators" accesskey="n" rel="next">C++ Named Operators</a>, Previous: <a href="Common-Predefined-Macros.html#Common-Predefined-Macros" accesskey="p" rel="prev">Common Predefined Macros</a>, Up: <a href="Predefined-Macros.html#Predefined-Macros" 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#Index-of-Directives" title="Index" rel="index">Index</a>]</p>
  66. </div>
  67. <hr>
  68. <a name="System_002dspecific-Predefined-Macros-1"></a>
  69. <h4 class="subsection">3.7.3 System-specific Predefined Macros</h4>
  70. <a name="index-system_002dspecific-predefined-macros"></a>
  71. <a name="index-predefined-macros_002c-system_002dspecific"></a>
  72. <a name="index-reserved-namespace"></a>
  73. <p>The C preprocessor normally predefines several macros that indicate what
  74. type of system and machine is in use. They are obviously different on
  75. each target supported by GCC. This manual, being for all systems and
  76. machines, cannot tell you what their names are, but you can use
  77. <code>cpp -dM</code> to see them all. See <a href="Invocation.html#Invocation">Invocation</a>. All system-specific
  78. predefined macros expand to a constant value, so you can test them with
  79. either &lsquo;<samp>#ifdef</samp>&rsquo; or &lsquo;<samp>#if</samp>&rsquo;.
  80. </p>
  81. <p>The C standard requires that all system-specific macros be part of the
  82. <em>reserved namespace</em>. All names which begin with two underscores,
  83. or an underscore and a capital letter, are reserved for the compiler and
  84. library to use as they wish. However, historically system-specific
  85. macros have had names with no special prefix; for instance, it is common
  86. to find <code>unix</code> defined on Unix systems. For all such macros, GCC
  87. provides a parallel macro with two underscores added at the beginning
  88. and the end. If <code>unix</code> is defined, <code>__unix__</code> will be defined
  89. too. There will never be more than two underscores; the parallel of
  90. <code>_mips</code> is <code>__mips__</code>.
  91. </p>
  92. <p>When the <samp>-ansi</samp> option, or any <samp>-std</samp> option that
  93. requests strict conformance, is given to the compiler, all the
  94. system-specific predefined macros outside the reserved namespace are
  95. suppressed. The parallel macros, inside the reserved namespace, remain
  96. defined.
  97. </p>
  98. <p>We are slowly phasing out all predefined macros which are outside the
  99. reserved namespace. You should never use them in new programs, and we
  100. encourage you to correct older code to use the parallel macros whenever
  101. you find it. We don&rsquo;t recommend you use the system-specific macros that
  102. are in the reserved namespace, either. It is better in the long run to
  103. check specifically for features you need, using a tool such as
  104. <code>autoconf</code>.
  105. </p>
  106. <hr>
  107. <div class="header">
  108. <p>
  109. Next: <a href="C_002b_002b-Named-Operators.html#C_002b_002b-Named-Operators" accesskey="n" rel="next">C++ Named Operators</a>, Previous: <a href="Common-Predefined-Macros.html#Common-Predefined-Macros" accesskey="p" rel="prev">Common Predefined Macros</a>, Up: <a href="Predefined-Macros.html#Predefined-Macros" 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#Index-of-Directives" title="Index" rel="index">Index</a>]</p>
  110. </div>
  111. </body>
  112. </html>