cpp.info: System-specific Predefined Macros

Go forward to C++ Named Operators
Go backward to Common Predefined Macros
Go up to Predefined Macros
Go to the top op cpp

System-specific Predefined Macros

   The C preprocessor normally predefines several macros that indicate
what type of system and machine is in use.  They are obviously
different on each target supported by GCC.  This manual, being for all
systems and machines, cannot tell you what their names are, but you can
use `cpp -dM' to see them all.  *Note Invocation::.  All system-specific
predefined macros expand to the constant 1, so you can test them with
either `#ifdef' or `#if'.
   The C standard requires that all system-specific macros be part of
the "reserved namespace".  All names which begin with two underscores,
or an underscore and a capital letter, are reserved for the compiler and
library to use as they wish.  However, historically system-specific
macros have had names with no special prefix; for instance, it is common
to find `unix' defined on Unix systems.  For all such macros, GCC
provides a parallel macro with two underscores added at the beginning
and the end.  If `unix' is defined, `__unix__' will be defined too.
There will never be more than two underscores; the parallel of `_mips'
is `__mips__'.
   When the `-ansi' option, or any `-std' option that requests strict
conformance, is given to the compiler, all the system-specific
predefined macros outside the reserved namespace are suppressed.  The
parallel macros, inside the reserved namespace, remain defined.
   We are slowly phasing out all predefined macros which are outside the
reserved namespace.  You should never use them in new programs, and we
encourage you to correct older code to use the parallel macros whenever
you find it.  We don't recommend you use the system-specific macros that
are in the reserved namespace, either.  It is better in the long run to
check specifically for features you need, using a tool such as