1 <html><head><meta http-equiv=
"Content-Type" content=
"text/html; charset=UTF-8"><title>Macros
</title><meta name=
"generator" content=
"DocBook XSL-NS Stylesheets V1.76.1"><meta name=
"keywords" content=
"
5 "><meta name=
"keywords" content=
"
11 "><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_namespaces.html" title=
"Namespaces"></head><body bgcolor=
"white" text=
"black" link=
"#0000FF" vlink=
"#840084" alink=
"#0000FF"><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_namespaces.html">Next
</a></td></tr></table><hr></div><div class=
"section" title=
"Macros"><div class=
"titlepage"><div><div><h2 class=
"title" style=
"clear: both"><a name=
"manual.intro.using.macros"></a>Macros
</h2></div></div></div><p>
12 All library macros begin with
<code class=
"code">_GLIBCXX_
</code>.
14 Furthermore, all pre-processor macros, switches, and
15 configuration options are gathered in the
16 file
<code class=
"filename">c++config.h
</code>, which
17 is generated during the libstdc++ configuration and build
18 process. This file is then included when needed by files part of
19 the public libstdc++ API, like
<ios
>. Most of these macros
20 should not be used by consumers of libstdc++, and are reserved
21 for internal implementation use.
<span class=
"emphasis"><em>These macros cannot
22 be redefined
</em></span>.
24 A select handful of macros control libstdc++ extensions and extra
25 features, or provide versioning information for the API. Only
26 those macros listed below are offered for consideration by the
28 </p><p>Below is the macro which users may check for library version
29 information.
</p><div class=
"variablelist"><dl><dt><span class=
"term"><code class=
"code">__GLIBCXX__
</code></span></dt><dd><p>The current version of
30 libstdc++ in compressed ISO date format, form of an unsigned
31 long. For details on the value of this particular macro for a
32 particular release, please consult this
<a class=
"link" href=
"abi.html" title=
"ABI Policy and Guidelines">
34 </p></dd></dl></div><p>Below are the macros which users may change with #define/#undef or
35 with -D/-U compiler flags. The default state of the symbol is
36 listed.
</p><p><span class=
"quote">“
<span class=
"quote">Configurable
</span>”
</span> (or
<span class=
"quote">“
<span class=
"quote">Not configurable
</span>”
</span>) means
37 that the symbol is initially chosen (or not) based on
38 --enable/--disable options at library build and configure time
39 (documented
<a class=
"link" href=
"configure.html" title=
"Configure">here
</a>), with the
40 various --enable/--disable choices being translated to
42 </p><p> <acronym class=
"acronym">ABI
</acronym> means that changing from the default value may
43 mean changing the
<acronym class=
"acronym">ABI
</acronym> of compiled code. In other words, these
44 choices control code which has already been compiled (i.e., in a
45 binary such as libstdc++.a/.so). If you explicitly #define or
46 #undef these macros, the
<span class=
"emphasis"><em>headers
</em></span> may see different code
47 paths, but the
<span class=
"emphasis"><em>libraries
</em></span> which you link against will not.
48 Experimenting with different values with the expectation of
49 consistent linkage requires changing the config headers before
50 building/installing the library.
51 </p><div class=
"variablelist"><dl><dt><span class=
"term"><code class=
"code">_GLIBCXX_USE_DEPRECATED
</code></span></dt><dd><p>
52 Defined by default. Not configurable. ABI-changing. Turning this off
53 removes older ARM-style iostreams code, and other anachronisms
54 from the API. This macro is dependent on the version of the
55 standard being tracked, and as a result may give different results for
56 <code class=
"code">-std=c++
98</code> and
<code class=
"code">-std=c++
11</code>. This may
57 be useful in updating old C++ code which no longer meet the
58 requirements of the language, or for checking current code
59 against new language standards.
60 </p></dd><dt><span class=
"term"><code class=
"code">_GLIBCXX_CONCEPT_CHECKS
</code></span></dt><dd><p>
61 Undefined by default. Configurable via
62 <code class=
"code">--enable-concept-checks
</code>. When defined, performs
63 compile-time checking on certain template instantiations to
64 detect violations of the requirements of the standard. This
65 is described in more detail
<a class=
"link" href=
"ext_compile_checks.html" title=
"Chapter 16. Compile Time Checks">here
</a>.
66 </p></dd><dt><span class=
"term"><code class=
"code">_GLIBCXX_DEBUG
</code></span></dt><dd><p>
67 Undefined by default. When defined, compiles user code using
68 the
<a class=
"link" href=
"debug_mode.html" title=
"Chapter 17. Debug Mode">debug mode
</a>.
69 </p></dd><dt><span class=
"term"><code class=
"code">_GLIBCXX_DEBUG_PEDANTIC
</code></span></dt><dd><p>
70 Undefined by default. When defined while compiling with
71 the
<a class=
"link" href=
"debug_mode.html" title=
"Chapter 17. Debug Mode">debug mode
</a>, makes
72 the debug mode extremely picky by making the use of libstdc++
73 extensions and libstdc++-specific behavior into errors.
74 </p></dd><dt><span class=
"term"><code class=
"code">_GLIBCXX_PARALLEL
</code></span></dt><dd><p>Undefined by default. When defined, compiles user code
75 using the
<a class=
"link" href=
"parallel_mode.html" title=
"Chapter 18. Parallel Mode">parallel
77 </p></dd><dt><span class=
"term"><code class=
"code">_GLIBCXX_PROFILE
</code></span></dt><dd><p>Undefined by default. When defined, compiles user code
78 using the
<a class=
"link" href=
"profile_mode.html" title=
"Chapter 19. Profile Mode">profile
80 </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_namespaces.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"> Namespaces
</td></tr></table></div></body></html>