Please send updates/corrections to predef-contribute or through pull requests on GitHub.
Type |
Macro |
Description |
Identification |
_AIX |
|
Version |
_AIX'VR' |
V = Version R = Revision |
Identification |
__TOS_AIX__ |
Defined by xlC |
If _AIX
is defined, then the following macros can be used to determine the version. Notice that the macros indicates the mentioned version or higher. For example, if _AIX43
is defined, then _AIX41
will also be defined.
AIX Version |
Macro |
3.2.x |
_AIX3
_AIX32 |
4.1 |
_AIX41 |
4.3 |
_AIX43 |
Type |
Macro |
Format |
Description |
Identification |
__ANDROID__ |
|
|
Version |
__ANDROID_API__ |
V |
V = API Version
Must be included from <android/api-level.h> |
Notice that Android is based on Linux, and that the Linux macros also are defined for Android.
Android Version |
__ANDROID_API__ |
1.0 |
1 |
1.1 |
2 |
1.5 |
3 |
1.6 |
4 |
2.0 |
5 |
2.0.1 |
6 |
2.1 |
7 |
2.2 |
8 |
2.3 |
9 |
2.3.3 |
10 |
3.0 |
11 |
Type |
Macro |
Identification |
UTS |
Type |
Macro |
Description |
Identification |
AMIGA |
|
Identification |
__amigaos__ |
Defined by GNU C |
Type |
Macro |
Identification |
aegis |
Type |
Macro |
Identification |
apollo |
Originally Amiga Research Operating System, later renamed to AROS Research Operating System.
Type |
Macro |
Identification |
__AROS__ |
Based on Nucleus OS.
Type |
Macro |
Format |
Description |
Identification |
__BEOS__ |
|
|
Version |
B_BEOS_VERSION |
0xVVRR |
VV = Version RR = Revision
Must be included from <BeBuild.h> |
Type |
Macro |
Description |
Identification |
__bg__ |
All Blue Gene systems
Defined by XL C/C++ and GNU C |
Version |
__bgq__ |
Blue Gene/Q
Defined for XL C/C++ and GNU C |
Identification |
__THW_BLUEGENE__ |
All Blue Gene systems
Defined by XL C/C++ |
Version |
__TOS_BGQ__ |
Blue Gene/Q
Defined by XL C/C++ |
Type |
Macro |
Format |
Description |
Identification |
__FreeBSD__
__NetBSD__
__OpenBSD__
__bsdi__
__DragonFly__ |
|
|
Version |
BSD |
YYYYMM |
YYYY = Year MM = Month
Must be included from <sys/param.h> |
Version |
BSD4_2
BSD4_3
BSD4_4 |
|
Must be included from <sys/param.h> |
Identification |
_SYSTYPE_BSD |
|
Defined by DEC C |
Version |
BSD |
Macro |
4.3 Net2 |
199103 |
|
4.4 |
199306 |
BSD4_4 |
4.4BSD-Lite2 |
199506 |
|
Type |
Macro |
Identification |
__bsdi__ |
Type |
Macro |
Identification |
__convex__ |
Type |
Macro |
Identification |
__CYGWIN__ |
Type |
Macro |
Identification |
DGUX |
Identification |
__DGUX__ |
Identification |
__dgux__ |
Type |
Macro |
Identification |
__DragonFly__ |
Type |
Macro |
Identification |
_SEQUENT_ |
Identification |
sequent |
Type |
Macro |
Identification |
__ECOS |
Type |
Macro |
Identification |
__EMX__ |
Type |
Macro |
Format |
Description |
Identification |
__FreeBSD__ |
|
|
Identification |
__FreeBSD_kernel__ |
|
From FreeBSD 8.3, 9.1, and 10.0.1 |
Version |
BSD |
|
|
Version |
__FreeBSD__ |
V |
V = Version |
Version |
__FreeBSD_version |
? |
Must be included from <osreldate.h> |
FreeBSD |
__FreeBSD__ |
__FreeBSD_version |
1.x |
1 |
|
2.0-RELEASE |
2 |
119411 |
2.2-RELEASE |
2 |
220000 |
3.0-RELEASE |
3 |
300005 |
4.0-RELEASE |
4 |
400017 |
4.5-RELEASE |
4 |
450000 |
For more information see the FreeBSD porters handbook.
Type |
Macro |
Format |
Description |
Identification |
__Fuchsia__ |
|
1 |
Version |
__Fuchsia_API_level__ |
V |
V = API level 1 |
The official name of this operating system is GNU. Hurd is the kernel in the GNU operating system. It is often listed as GNU/Hurd since there is also GNU/Linux and GNU/kFreeBSD, which are most of the GNU operating system with the Linux and FreeBSD kernels respectively.
Type |
Macro |
Identification |
__GNU__ 1 |
Identification |
__gnu_hurd__ 1 |
GNU/kFreeBSD is one of the Debian distros that is based on the FreeBSD kernel rather than the Linux or Hurd kernels.
Type |
Macro |
Identification |
__FreeBSD_kernel__ && __GLIBC__ |
Notice that FreeBSD also defines __FreeBSD_kernel__
so the __GLIBC__
macro must be checked to distinguish it.
Type |
Macro |
Identification |
__gnu_linux__ |
Type |
Macro |
Format |
Description |
Identification |
__HAIKU__ |
|
|
Version |
B_HAIKU_VERSION_'V' |
0x00VV0000 |
VV = Version
Defined in advance before being reached.
Must be included from <BeBuild.h> |
Version |
B_HAIKU_VERSION |
0x00VVRRPP |
VV = Version RR = Revision (Alpha and Beta ordering for VV+1) PP = Pre (0 or 1 if before RR+1)
Must be included from <BeBuild.h> |
Haiku |
B_HAIKU_VERSION |
1 Alpha 1 |
B_HAIKU_VERSION_1_ALPHA_1 = 0x00000100 |
1 Alpha 4 |
B_HAIKU_VERSION_1_ALPHA_4 = 0x00000400 |
1 Beta 1 |
B_HAIKU_VERSION_1_BETA_1 = 0x00000500 |
Git version before 1 Beta 4 |
B_HAIKU_VERSION_1_PRE_BETA_4 = 0x00000701 |
1 |
B_HAIKU_VERSION_1 = 0x00010000 |
Type |
Macro |
Identification |
__hiuxmpp |
Type |
Macro |
Description |
Identification |
_hpux |
Defined by HP UPC |
Identification |
hpux |
|
Identification |
__hpux |
|
Type |
Macro |
Format |
Description |
Identification |
__OS400__ |
|
|
Version |
__OS400_TGTVRM__ |
VRM |
V = Version R = Revision M = Modification |
Type |
Macro |
Description |
Identification |
__illumos__ |
See also: 13726 distinguish ourselves with a macro |
Identification |
sun |
Shared with Solaris; use not recommended |
Identification |
__sun |
Shared with Solaris; use not recommended |
Note that illumos forked from Solaris in ~2010, but continues to provide the identifying definitions that Solaris provided at the point of the fork.
Type |
Macro |
Identification |
__INTEGRITY |
Type |
Macro |
Description |
Identification |
__INTERIX |
Defined by GNU C and Visual Studio |
Type |
Macro |
Identification |
sgi |
Identification |
__sgi |
Systems based on the Linux kernel define these macros. There are two major Linux-based operating systems: GNU/Linux and Android, and numerous others like Ångström or OpenEmbedded
Type |
Macro |
Description |
Identification |
__linux__ |
1 |
Identification |
linux |
Obsolete (not POSIX compliant) |
Identification |
__linux |
Obsolete (not POSIX compliant) |
Type |
Macro |
Identification |
__Lynx__ |
Type |
Macro |
Description |
Identification |
macintosh |
Mac OS 9 |
Identification |
Macintosh |
Mac OS 9 |
Identification |
__APPLE__ && __MACH__ |
Mac OS X
Defined by GNU C and Intel C++ |
Type |
Macro |
Description |
Identification |
__OS9000 |
Defined by Ultimate C/C++ |
Identification |
_OSK |
Defined by Ultimate C/C++ |
Type |
Macro |
Identification |
__minix |
Originally MiNT is Not TOS, later renamed to MiNT is Now TOS.
Type |
Macro |
Identification |
__MINT__ |
Type |
Macro |
Identification |
__MORPHOS__ |
Type |
Macro |
Identification |
mpeix |
Identification |
__mpexl |
Type |
Macro |
Identification |
MSDOS |
Identification |
__MSDOS__ |
Identification |
_MSDOS |
Identification |
__DOS__ |
Type |
Macro |
Format |
Description |
Identification |
__NetBSD__ |
|
|
Version |
BSD |
|
|
Version |
NetBSD'V'_'R' |
|
V = Version R = Revision
Must be included from <sys/param.h> |
Version |
__NetBSD_Version__ |
VVRRAAPP00 |
VV = Version RR = Revision AA = Release PP = Patch
From NetBSD 1.2D (?) until NetBSD 2.0H
Must be included from <sys/param.h> |
Version |
__NetBSD_Version__ |
VVRR00PP00 |
VV = Version RR = Revision PP = Patch
From NetBSD 2.99.9
Must be included from <sys/param.h> |
NetBSD |
__NetBSD_Version__ |
Macro |
0.8 |
|
NetBSD0_8 |
0.9 |
|
NetBSD0_9 |
1.0 |
|
NetBSD1_0 = 1 |
1.0A |
|
NetBSD1_0 = 2 |
1.2D |
102040000 |
|
1.2.1 |
102000100 |
|
Type |
Macro |
Identification |
NeXT |
Type |
Macro |
Identification |
__TANDEM |
Type |
Macro |
Identification |
__nucleus__ |
Type |
Macro |
Format |
Description |
Identification |
__OpenBSD__ |
|
|
Version |
BSD |
|
|
Version |
OpenBSD'V'_'R' |
|
V = Version R = Revision
Must be included from <sys/param.h> |
OpenBSD |
Macro |
3.1 |
OpenBSD3_1 |
3.9 |
OpenBSD3_9 |
Type |
Macro |
Identification |
OS2 |
Identification |
_OS2 |
Identification |
__OS2__ |
Identification |
__TOS_OS2__ |
Type |
Macro |
Description |
Identification |
__palmos__ |
Defined by GNU C in PRC-Tools |
Type |
Macro |
Identification |
EPLAN9 |
Type |
Macro |
Identification |
pyr |
Type |
Macro |
Format |
Description |
Identification |
__QNX__ |
|
QNX 4.x |
Identification |
__QNXNTO__ |
|
QNX 6.x |
Version |
_NTO_VERSION |
VRR |
V = Version RR = Revision
Only available when __QNXNTO__ is defined.
Must be included from <sys/neutrino.h> |
Version |
BBNDK_VERSION_CURRENT |
VVRRRRPPPP |
V = Version RRRR = Revision PPPP = Patch
Only available on Blackberry 10
From Blackberry 10.1.0
Must be included from <bbndk.h> |
Type |
Macro |
Identification |
sinux |
Type |
Macro |
Description |
Identification |
M_I386 |
Defined by GNU C |
Identification |
M_XENIX |
Defined by GNU C |
Identification |
_SCO_DS |
|
Type |
Macro |
Description |
Identification |
__serenity__ |
Defined by GNU C and Clang |
Type |
Macro |
Description |
Identification |
sun |
|
Identification |
__sun |
|
Version |
__'System'_'Version' |
System = uname -s Version = uname -r Any illegal character is replaced by an underscore.
Defined by Sun Studio |
Use the SVR4 macros to distinguish between Solaris and SunOS.
#if defined(sun) || defined(__sun)
# if defined(__SVR4) || defined(__svr4__)
/* Solaris */
# else
/* SunOS */
# endif
#endif
Solaris |
Macro |
2.7 |
__SunOS_5_7 |
8 |
__SunOS_5_8 |
Type |
Macro |
Format |
Description |
Identification |
__VOS__ |
|
|
Version |
__VOS__ |
V |
V = Version |
Notice that the __VOS__
macro is defined by the compiler, but as several compilers can co-exist in the same OS release, the version number is not reliable.
Type |
Macro |
Description |
Identification |
__sysv__ |
|
Identification |
__SVR4 |
|
Identification |
__svr4__ |
|
Identification |
_SYSTYPE_SVR4 |
Defined on IRIX |
Type |
Macro |
Identification |
__SYLLABLE__ |
Type |
Macro |
Identification |
__SYMBIAN32__ |
Type |
Macro |
Identification |
__osf__ |
Identification |
__osf |
Type |
Macro |
Identification |
ultrix |
Identification |
__ultrix |
Identification |
__ultrix__ |
Identification |
unix & vax |
Type |
Macro |
Format |
Description |
Identification |
_UNICOS |
|
|
Version |
_UNICOS |
V |
V = Version |
Type |
Macro |
Description |
Identification |
_CRAY
__crayx1 |
|
Type |
Macro |
Identification |
__unix__ |
Identification |
__unix |
Notice that not all compilers defines these macros, e.g. the xlC or the DEC C/C++ compiler, so it may be better to use the POSIX or X/Open standard macros instead.
Type |
Macro |
Identification |
sco |
Identification |
_UNIXWARE7 |
Type |
Macro |
Identification |
_UWIN |
Type |
Macro |
Format |
Description |
Identification |
VMS |
|
|
Identification |
__VMS |
|
|
Version |
__VMS_VER |
VVRREPPTT |
VV = Version RR = Revision E = Edit number PP = Patch (01 = A, ... 26 = Z) TT = Type (22 = official) |
VMS |
__VMS_VER |
6.1 |
60100022 |
6.2 |
60200022 |
6.2-1I |
60210922 |
Type |
Macro |
Description |
Identification |
__VXWORKS__ |
Defined by GNU C and Diab (from ?) |
Identification |
__vxworks |
Defined by GNU C and Diab (from ?) |
Version |
_WRS_VXWORKS_MAJOR |
Version
Must be included from <version.h> |
Version |
_WRS_VXWORKS_MINOR |
Revision
Must be included from <version.h> |
Version |
_WRS_VXWORKS_MAINT |
Patch/maintenance
Must be included from <version.h> |
Mode |
__RTP__ |
For real-time mode |
Mode |
_WRS_KERNEL |
For kernel mode |
VxWorks |
_WRS_VXWORKS_MAJOR |
_WRS_VXWORKS_MINOR |
_WRS_VXWORKS_MAINT |
6.2 |
6 |
2 |
0 |
Type |
Macro |
Description |
Identification |
_WIN16 |
Defined for 16-bit environments 1 |
Identification |
_WIN32 |
Defined for both 32-bit and 64-bit environments 1 |
Identification |
_WIN64 |
Defined for 64-bit environments 1 |
Identification |
__WIN32__ |
Defined by Borland C++ |
Identification |
__TOS_WIN__ |
Defined by xlC |
Identification |
__WINDOWS__ |
Defined for 16-bit-environments by Watcom C/C++ 1 |
Type |
Macro |
Format |
Description |
Identification |
_WIN32_WCE |
|
Defined by Embedded Visual Studio C++ |
Version |
_WIN32_WCE |
VRR |
V = Version R = Revision |
Identification |
WIN32_PLATFORM_'P' |
|
P = Platform |
Version |
WIN32_PLATFORM_'P' |
V |
P = Platform V = Version |
Version |
_WIN32_WCE |
2.01 |
201 |
2.11 |
211 |
3.0 |
300 |
4.0 |
400 |
4.1 |
410 |
4.2 |
420 |
5.0 |
501 |
Platform |
Macro |
Value |
H/PC 2000 |
WIN32_PLATFORM_HPC2000 |
|
H/PC Pro 2.11 |
WIN32_PLATFORM_HPCPRO |
211 |
H/PC Pro 3.0 |
WIN32_PLATFORM_HPCPRO |
300 |
Pocket PC |
WIN32_PLATFORM_PSPC |
1 |
Pocket PC 2002 |
WIN32_PLATFORM_PSPC |
310 |
Windows Mobile 2003 |
WIN32_PLATFORM_PSPC |
400 |
Smartphone 2002 |
WIN32_PLATFORM_WFSP |
100 |
Type |
Macro |
Format |
Description |
Identification |
_WINDU_SOURCE |
|
|
Version |
_WINDU_SOURCE |
0xVVRRPP |
VV = Version RR = Revision PP = Patch |
Wind/U |
_WINDU_SOURCE |
3.1.2 |
0x030102 |
Type |
Macro |
Description |
Identification |
__MVS__ |
Host |
Identification |
__HOS_MVS__ |
Host |
Identification |
__TOS_MVS__ |
Target |