2012-03-27 23:13:14 +00:00
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2018-12-28 15:30:48 +00:00
<!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 >
2012-03-27 23:13:14 +00:00
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
2015-08-28 15:33:40 +00:00
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
2012-03-27 23:13:14 +00:00
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.
2017-10-07 00:16:47 +00:00
< / 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
2012-03-27 23:13:14 +00:00
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
2015-08-28 15:33:40 +00:00
(documented in
< a class = "link" href = "configure.html" title = "Configure" > Configure< / a > ),
with the various --enable/--disable choices being translated to
2012-03-27 23:13:14 +00:00
#define/#undef).
< / p > < p > < acronym class = "acronym" > ABI< / acronym > means that changing from the default value may
2015-08-28 15:33:40 +00:00
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
2012-03-27 23:13:14 +00:00
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.
2014-09-21 17:33:12 +00:00
< / p > < div class = "variablelist" > < dl class = "variablelist" > < dt > < span class = "term" > < code class = "code" > _GLIBCXX_USE_DEPRECATED< / code > < / span > < / dt > < dd > < p >
2012-03-27 23:13:14 +00:00
Defined 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
< code class = "code" > -std=c++98< / code > and < code class = "code" > -std=c++11< / code > . This may
be useful in updating old C++ code which no longer meet the
requirements of the language, or for checking current code
against new language standards.
2015-08-28 15:33:40 +00:00
< / 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 > .
2014-09-21 17:33:12 +00:00
< / p > < / dd > < dt > < span class = "term" > < code class = "code" > _GLIBCXX_CONCEPT_CHECKS< / code > < / span > < / dt > < dd > < p >
2012-03-27 23:13:14 +00:00
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
2017-04-10 11:32:00 +00:00
macro has no effect for freestanding implementations.
This is described in more detail in
2015-08-28 15:33:40 +00:00
< a class = "link" href = "ext_compile_checks.html" title = "Chapter 16. Compile Time Checks" > Compile Time Checks< / a > .
2017-04-10 11:32:00 +00:00
< / p > < / dd > < dt > < span class = "term" > < code class = "code" > _GLIBCXX_ASSERTIONS< / code > < / span > < / dt > < dd > < p >
Undefined by default. 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.
2012-03-27 23:13:14 +00:00
< / 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
2015-08-28 15:33:40 +00:00
the < a class = "link" href = "debug_mode.html" title = "Chapter 17. Debug Mode" > debug mode< / a > .
2017-04-10 11:32:00 +00:00
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.
2012-03-27 23:13:14 +00:00
< / 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
2015-08-28 15:33:40 +00:00
the < a class = "link" href = "debug_mode.html" title = "Chapter 17. Debug Mode" > debug mode< / a > , makes
the debug mode extremely picky by making the use of libstdc++
extensions and libstdc++-specific behavior into errors.
2012-03-27 23:13:14 +00:00
< / p > < / dd > < dt > < span class = "term" > < code class = "code" > _GLIBCXX_PARALLEL< / code > < / span > < / dt > < dd > < p > Undefined by default. When defined, compiles user code
2015-08-28 15:33:40 +00:00
using the < a class = "link" href = "parallel_mode.html" title = "Chapter 18. Parallel Mode" > parallel
mode< / a > .
2017-10-07 00:16:47 +00:00
< / 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.
2012-03-27 23:13:14 +00:00
< / p > < / dd > < dt > < span class = "term" > < code class = "code" > _GLIBCXX_PROFILE< / code > < / span > < / dt > < dd > < p > Undefined by default. When defined, compiles user code
2015-08-28 15:33:40 +00:00
using the < a class = "link" href = "profile_mode.html" title = "Chapter 19. Profile Mode" > profile
mode< / a > .
2017-04-10 11:32:00 +00:00
< / 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.
2018-12-28 15:30:48 +00:00
< / 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
2019-06-02 15:48:37 +00:00
< 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
2018-12-28 15:30:48 +00:00
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.
2015-08-28 15:33:40 +00:00
< / 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 >