xref: /netbsd-src/external/gpl3/gcc.old/dist/libstdc++-v3/doc/html/manual/using_macros.html (revision 63ce0b47aeb8b4c6792d02a0de9ecf8182e299ac)
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Macros</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_headers.html" title="Headers" /><link rel="next" href="using_dual_abi.html" title="Dual ABI" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Macros</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_headers.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_dual_abi.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.macros"></a>Macros</h2></div></div></div><p>
3     All library macros begin with <code class="code">_GLIBCXX_</code>.
4   </p><p>
5     Furthermore, all pre-processor macros, switches, and
6      configuration options are gathered in the
7      file <code class="filename">c++config.h</code>, which
8      is generated during the libstdc++ configuration and build
9      process. This file is then included when needed by files part of
10      the public libstdc++ API, like
11      <code class="filename">&lt;ios&gt;</code>. Most of these
12      macros should not be used by consumers of libstdc++, and are reserved
13      for internal implementation use. <span class="emphasis"><em>These macros cannot
14      be redefined</em></span>.
15   </p><p>
16     A select handful of macros control libstdc++ extensions and extra
17      features, or provide versioning information for the API.  Only
18      those macros listed below are offered for consideration by the
19      general public.
20   </p><p>Below is the macro which users may check for library version
21      information. </p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="code">__GLIBCXX__</code></span></dt><dd><p>The current version of
22    libstdc++ in compressed ISO date format, as an unsigned
23    long. For details on the value of this particular macro for a
24    particular release, please consult the <a class="link" href="abi.html" title="ABI Policy and Guidelines">
25    ABI Policy and Guidelines</a> appendix.
26    </p></dd></dl></div><p>Below are the macros which users may change with #define/#undef or
27      with -D/-U compiler flags.  The default state of the symbol is
28      listed.</p><p><span class="quote">“<span class="quote">Configurable</span>”</span> (or <span class="quote">“<span class="quote">Not configurable</span>”</span>) means
29      that the symbol is initially chosen (or not) based on
30      --enable/--disable options at library build and configure time
31      (documented in
32      <a class="link" href="configure.html" title="Configure">Configure</a>),
33      with the various --enable/--disable choices being translated to
34      #define/#undef).
35   </p><p> <acronym class="acronym">ABI</acronym> means that changing from the default value may
36  mean changing the <acronym class="acronym">ABI</acronym> of compiled code. In other words,
37  these choices control code which has already been compiled (i.e., in a
38  binary such as libstdc++.a/.so).  If you explicitly #define or
39  #undef these macros, the <span class="emphasis"><em>headers</em></span> may see different code
40  paths, but the <span class="emphasis"><em>libraries</em></span> which you link against will not.
41  Experimenting with different values with the expectation of
42  consistent linkage requires changing the config headers before
43  building/installing the library.
44   </p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="code">_GLIBCXX_USE_DEPRECATED</code></span></dt><dd><p>
45	Defined by default. Not configurable. ABI-changing. Turning this off
46	removes older ARM-style iostreams code, and other anachronisms
47	from the API.  This macro is dependent on the version of the
48	standard being tracked, and as a result may give different results for
49	<code class="code">-std=c++98</code> and <code class="code">-std=c++11</code>. This may
50	be useful in updating old C++ code which no longer meet the
51	requirements of the language, or for checking current code
52	against new language standards.
53    </p></dd><dt><span class="term"><code class="code">_GLIBCXX_USE_CXX11_ABI</code></span></dt><dd><p>
54        Defined to the value <code class="literal">1</code> by default.
55        Configurable via  <code class="code">--disable-libstdcxx-dual-abi</code>
56        and/or <code class="code">--with-default-libstdcxx-abi</code>.
57        ABI-changing.
58        When defined to a non-zero value the library headers will use the
59        new C++11-conforming ABI introduced in GCC 5, rather than the older
60        ABI introduced in GCC 3.4. This changes the definition of several
61        class templates, including <code class="classname">std:string</code>,
62        <code class="classname">std::list</code> and some locale facets.
63        For more details see <a class="xref" href="using_dual_abi.html" title="Dual ABI">Dual ABI</a>.
64    </p></dd><dt><span class="term"><code class="code">_GLIBCXX_CONCEPT_CHECKS</code></span></dt><dd><p>
65	Undefined by default.  Configurable via
66	<code class="code">--enable-concept-checks</code>.  When defined, performs
67	compile-time checking on certain template instantiations to
68	detect violations of the requirements of the standard.  This
69	macro has no effect for freestanding implementations.
70	This is described in more detail in
71	<a class="link" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks">Compile Time Checks</a>.
72      </p></dd><dt><span class="term"><code class="code">_GLIBCXX_ASSERTIONS</code></span></dt><dd><p>
73	Undefined by default. When defined, enables extra error checking in
74        the form of precondition assertions, such as bounds checking in
75        strings and null pointer checks when dereferencing smart pointers.
76      </p></dd><dt><span class="term"><code class="code">_GLIBCXX_DEBUG</code></span></dt><dd><p>
77	Undefined by default. When defined, compiles user code using
78	the <a class="link" href="debug_mode.html" title="Chapter 17. Debug Mode">debug mode</a>.
79        When defined, <code class="code">_GLIBCXX_ASSERTIONS</code> is defined
80        automatically, so all the assertions enabled by that macro are also
81        enabled in debug mode.
82      </p></dd><dt><span class="term"><code class="code">_GLIBCXX_DEBUG_PEDANTIC</code></span></dt><dd><p>
83	Undefined by default. When defined while compiling with
84	the <a class="link" href="debug_mode.html" title="Chapter 17. Debug Mode">debug mode</a>, makes
85	the debug mode extremely picky by making the use of libstdc++
86	extensions and libstdc++-specific behavior into errors.
87      </p></dd><dt><span class="term"><code class="code">_GLIBCXX_PARALLEL</code></span></dt><dd><p>Undefined by default. When defined, compiles user code
88	using the <a class="link" href="parallel_mode.html" title="Chapter 18. Parallel Mode">parallel
89	mode</a>.
90      </p></dd><dt><span class="term"><code class="code">_GLIBCXX_PARALLEL_ASSERTIONS</code></span></dt><dd><p>Undefined by default, but when any parallel mode header is included
91      this macro will be defined to a non-zero value if
92      <code class="code">_GLIBCXX_ASSERTIONS</code> has a non-zero value, otherwise to zero.
93      When defined to a non-zero value, it enables extra error checking and
94      assertions in the parallel mode.
95      </p></dd><dt><span class="term"><code class="code">_GLIBCXX_PROFILE</code></span></dt><dd><p>Undefined by default. When defined, compiles user code
96	using the <a class="link" href="profile_mode.html" title="Chapter 19. Profile Mode">profile
97	mode</a>.
98      </p></dd><dt><span class="term"><code class="code">__STDCPP_WANT_MATH_SPEC_FUNCS__</code></span></dt><dd><p>Undefined by default. When defined to a non-zero integer constant,
99	enables support for ISO/IEC 29124 Special Math Functions.
100      </p></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_headers.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_dual_abi.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Headers </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Dual ABI</td></tr></table></div></body></html>