| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | |
| <!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 Stylesheets Vsnapshot" /><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> | |
| All library macros begin with <code class="code">_GLIBCXX_</code>. | |
| </p><p> | |
| Furthermore, all pre-processor macros, switches, and | |
| configuration options are gathered in the | |
| file <code class="filename">c++config.h</code>, which | |
| is generated during the libstdc++ configuration and build | |
| process. This file is then included when needed by files part of | |
| the public libstdc++ API, like | |
| <code class="filename"><ios></code>. Most of these | |
| macros should not be used by consumers of libstdc++, and are reserved | |
| for internal implementation use. <span class="emphasis"><em>These macros cannot | |
| be redefined</em></span>. | |
| </p><p> | |
| A select handful of macros control libstdc++ extensions and extra | |
| features, or provide versioning information for the API. Only | |
| those macros listed below are offered for consideration by the | |
| general public. | |
| </p><p>Below are the macros which users may check for library version | |
| information. </p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="code">_GLIBCXX_RELEASE</code></span></dt><dd><p>The major release number for libstdc++. This macro is defined | |
| to the GCC major version that the libstdc++ headers belong to, | |
| as an integer constant. | |
| When compiling with GCC it has the same value as GCC's pre-defined | |
| macro <span class="symbol">__GNUC__</span>. | |
| This macro can be used when libstdc++ is used with a non-GNU | |
| compiler where <span class="symbol">__GNUC__</span> is not defined, or has a | |
| different value that doesn't correspond to the libstdc++ version. | |
| This macro first appeared in the GCC 7.1 release and is not defined | |
| for GCC 6.x or older releases. | |
| </p></dd><dt><span class="term"><code class="code">__GLIBCXX__</code></span></dt><dd><p>The revision date of the libstdc++ source code, | |
| in compressed ISO date format, as an unsigned | |
| long. For notes about using this macro and details on the value of | |
| this macro for a particular release, please consult the | |
| <a class="link" href="abi.html#abi.versioning.__GLIBCXX__">ABI History</a> | |
| appendix. | |
| </p></dd></dl></div><p>Below are the macros which users may change with #define/#undef or | |
| with -D/-U compiler flags. The default state of the symbol is | |
| listed.</p><p><span class="quote">“<span class="quote">Configurable</span>”</span> (or <span class="quote">“<span class="quote">Not configurable</span>”</span>) means | |
| that the symbol is initially chosen (or not) based on | |
| --enable/--disable options at library build and configure time | |
| (documented in | |
| <a class="link" href="configure.html" title="Configure">Configure</a>), | |
| with the various --enable/--disable choices being translated to | |
| #define/#undef). | |
| </p><p> <acronym class="acronym">ABI</acronym>-changing means that changing from the default value may | |
| mean changing the <acronym class="acronym">ABI</acronym> of compiled code. In other words, | |
| these choices control code which has already been compiled (i.e., in a | |
| binary such as libstdc++.a/.so). If you explicitly #define or | |
| #undef these macros, the <span class="emphasis"><em>headers</em></span> may see different code | |
| paths, but the <span class="emphasis"><em>libraries</em></span> which you link against will not. | |
| Experimenting with different values with the expectation of | |
| consistent linkage requires changing the config headers before | |
| building/installing the library. | |
| </p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="code">_GLIBCXX_USE_DEPRECATED</code></span></dt><dd><p> | |
| Defined to the value <code class="literal">1</code> by default. | |
| Not configurable. ABI-changing. Turning this off | |
| removes older ARM-style iostreams code, and other anachronisms | |
| from the API. This macro is dependent on the version of the | |
| standard being tracked, and as a result may give different results for | |
| different <code class="code">-std</code> options. This may | |
| be useful in updating old C++ code which no longer meets the | |
| requirements of the language, or for checking current code | |
| against new language standards. | |
| </p></dd><dt><span class="term"><code class="code">_GLIBCXX_USE_CXX11_ABI</code></span></dt><dd><p> | |
| Defined to the value <code class="literal">1</code> by default. | |
| Configurable via <code class="code">--disable-libstdcxx-dual-abi</code> | |
| and/or <code class="code">--with-default-libstdcxx-abi</code>. | |
| ABI-changing. | |
| When defined to a non-zero value the library headers will use the | |
| new C++11-conforming ABI introduced in GCC 5, rather than the older | |
| ABI introduced in GCC 3.4. This changes the definition of several | |
| class templates, including <code class="classname">std::string</code>, | |
| <code class="classname">std::list</code> and some locale facets. | |
| For more details see <a class="xref" href="using_dual_abi.html" title="Dual ABI">Dual ABI</a>. | |
| </p></dd><dt><span class="term"><code class="code">_GLIBCXX_CONCEPT_CHECKS</code></span></dt><dd><p> | |
| Undefined by default. Configurable via | |
| <code class="code">--enable-concept-checks</code>. When defined, performs | |
| compile-time checking on certain template instantiations to | |
| detect violations of the requirements of the standard. This | |
| macro has no effect for freestanding implementations. | |
| This is described in more detail in | |
| <a class="link" href="ext_compile_checks.html" title="Chapter 17. Compile Time Checks">Compile Time Checks</a>. | |
| </p></dd><dt><span class="term"><code class="code">_GLIBCXX_ASSERTIONS</code></span></dt><dd><p> | |
| Defined by default when compiling with no optimization, undefined | |
| by default when compiling with optimization. | |
| When defined, enables extra error checking in the form of | |
| precondition assertions, such as bounds checking in strings | |
| and null pointer checks when dereferencing smart pointers. | |
| </p></dd><dt><span class="term"><code class="code">_GLIBCXX_NO_ASSERTIONS</code></span></dt><dd><p> | |
| Undefined by default. When defined, prevents the implicit | |
| definition of <code class="code">_GLIBCXX_ASSERTIONS</code> when compiling | |
| with no optimization. | |
| </p></dd><dt><span class="term"><code class="code">_GLIBCXX_DEBUG</code></span></dt><dd><p> | |
| Undefined by default. When defined, compiles user code using | |
| the <a class="link" href="debug_mode.html" title="Chapter 18. Debug Mode">debug mode</a>. | |
| When defined, <code class="code">_GLIBCXX_ASSERTIONS</code> is defined | |
| automatically, so all the assertions enabled by that macro are also | |
| enabled in debug mode. | |
| </p></dd><dt><span class="term"><code class="code">_GLIBCXX_DEBUG_PEDANTIC</code></span></dt><dd><p> | |
| Undefined by default. When defined while compiling with | |
| the <a class="link" href="debug_mode.html" title="Chapter 18. Debug Mode">debug mode</a>, makes | |
| the debug mode extremely picky by making the use of libstdc++ | |
| extensions and libstdc++-specific behavior into errors. | |
| </p></dd><dt><span class="term"><code class="code">_GLIBCXX_DEBUG_BACKTRACE</code></span></dt><dd><p> | |
| Undefined by default. Considered only if libstdc++ has been configured with | |
| <code class="option">--enable-libstdcxx-backtrace=yes</code> and if <code class="code">_GLIBCXX_DEBUG</code> | |
| is defined. When defined display backtraces on | |
| <a class="link" href="debug_mode.html" title="Chapter 18. Debug Mode">debug mode</a> assertions. | |
| </p></dd><dt><span class="term"><code class="code">_GLIBCXX_PARALLEL</code></span></dt><dd><p>Undefined by default. When defined, compiles user code | |
| using the <a class="link" href="parallel_mode.html" title="Chapter 19. Parallel Mode">parallel | |
| mode</a>. | |
| </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 | |
| this macro will be defined to a non-zero value if | |
| <code class="code">_GLIBCXX_ASSERTIONS</code> has a non-zero value, otherwise to zero. | |
| When defined to a non-zero value, it enables extra error checking and | |
| assertions in the parallel mode. | |
| </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, | |
| enables support for ISO/IEC 29124 Special Math Functions. | |
| </p></dd><dt><span class="term"><code class="code">_GLIBCXX_SANITIZE_VECTOR</code></span></dt><dd><p> | |
| Undefined by default. When defined, <code class="classname">std::vector</code> | |
| operations will be annotated so that AddressSanitizer can detect | |
| invalid accesses to the unused capacity of a | |
| <code class="classname">std::vector</code>. These annotations are only | |
| enabled for | |
| <code class="classname">std::vector<T, std::allocator<T>></code> | |
| and only when <code class="classname">std::allocator</code> is derived from | |
| <a class="link" href="memory.html#allocator.ext" title="Extension Allocators"><code class="classname">new_allocator</code> | |
| or <code class="classname">malloc_allocator</code></a>. The annotations | |
| must be present on all vector operations or none, so this macro must | |
| be defined to the same value for all translation units that create, | |
| destroy, or modify vectors. | |
| </p></dd><dt><span class="term"><code class="code">_GLIBCXX_NO_FREESTANDING_CHRONO</code></span></dt><dd><p> | |
| Undefined by default. When defined, the | |
| <code class="filename"><chrono></code> header cannot | |
| be used with <code class="option">-ffreestanding</code>. | |
| When not defined, durations, time points, and calendar types are | |
| available for freestanding, but the standard clocks and the time zone | |
| database are not (because they require OS support). | |
| </p></dd><dt><span class="term"><code class="code">_GLIBCXX_USE_OLD_GENERATE_CANONICAL</code></span></dt><dd><p> | |
| Undefined by default. When defined <code class="code">generate_canonical</code> | |
| reverts to the algorithm used prior to the implementation of | |
| <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p0952r2.html" target="_top"> | |
| P0952: A new specification for std::generate_canonical</a> in GCC-16. | |
| </p></dd><dt><span class="term"><code class="code">_GLIBCXX_USE_VARIANT_CXX17_OLD_ABI</code></span></dt><dd><p> | |
| Undefined by default. When defined <code class="code">variant</code> in C++17 | |
| mode will revert to the non-conforming implementation used prior to the | |
| <a class="link" href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112591" target="_top">PR112591</a> | |
| in GCC-16. Has no impact for C++20 or later modes. | |
| </p></dd><dt><span class="term"><code class="code">_GLIBCXX_NO_INLINE_PRINT</code></span></dt><dd><p> | |
| Undefined by default. When defined <code class="code">std::print</code> and | |
| <code class="code">std::println</code> are not implemented using inline functions. | |
| This means that code using those functions will compile faster, | |
| but <code class="option">-lstdc++exp</code> must be used when linking. | |
| The non-inline definitions are compiled using | |
| <code class="option">-fexec-charset=UTF-8</code> so might give incorrect results | |
| if called from a source file that uses a non-Unicode encoding, | |
| especially for format strings using non-ASCII fill characters. | |
| </p></dd><dt><span class="term"><code class="code">_GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS</code></span></dt><dd><p> | |
| Defined to the value <code class="literal">1</code>, if not provided. | |
| ABI-changing when defined to the value <code class="literal">2</code>. | |
| When defined to a non-zero value, | |
| <code class="code">piecewise_constant_distribution</code> and | |
| <code class="code">piecewise_linear_distribution</code> incorporates corrections | |
| from <a class="link" href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82749" target="_top"> | |
| PR82749</a> (<a class="link" href="https://cplusplus.github.io/LWG/lwg-defects.html#1439" target="_top">LWG1439</a>), <a class="link" href="https://cplusplus.github.io/LWG/lwg-defects.html#4052" target="_top"> | |
| LWG4052</a>, and <a class="link" href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125548" target="_top"> | |
| PR125548</a> in GCC 17. | |
| </p><p> | |
| When defined to the value <code class="literal">0</code>, their behavior | |
| is restored to their state prior changes in GCC 17. | |
| </p><p> | |
| When defined to the value <code class="literal">2</code>, specializations of | |
| beforementioned distributions with a <code class="code">result_type</code> of | |
| either <code class="code">float</code> or <code class="code">long double</code> will manage | |
| their internal state using <code class="code">result_type</code> values (instead | |
| of <code class="code">double</code>). | |
| This is required for standard conformance, but is incompatible with | |
| the default implementation of those class templates. | |
| </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> |