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 uses Linux kernel, 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__
__MidnightBSD__ |
|
|
| 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 |
Format |
Description |
| Identification |
__CPM |
|
Defined by Z88DK |
| Identification |
CPM |
|
Defined by Z88DK |
| 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 |
Format |
Description |
| Identification |
EMSCRIPTEN |
|
From Emscripten 1.0.1a until Emscripten 1.30.6 |
| Identification |
__EMSCRIPTEN__ |
|
From Emscripten 1.3.7 |
| Version |
__EMSCRIPTEN_major__ |
V |
V = Major version
From Emscripten 1.21.4
Must be included from <emscripten/version.h> |
| Version |
__EMSCRIPTEN_minor__ |
R |
R = Minor version
From Emscripten 1.21.4
Must be included from <emscripten/version.h> |
| Version |
__EMSCRIPTEN_tiny__ |
P |
P = Patch level
From Emscripten 1.21.4
Must be included from <emscripten/version.h> |
For more information see Detecting Emscripten in Preprocessor
| Version |
__EMSCRIPTEN_major__ |
__EMSCRIPTEN_minor__ |
__EMSCRIPTEN_tiny__ |
| 3.1.41 |
3 |
1 |
41 |
| 3.1.41-git |
3 |
1 |
41 |
| 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 <sys/param.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 C++ |
| 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 |
Description |
| Identification |
__MidnightBSD__ |
|
| Identification |
__MidnightBSD_kernel__ |
|
| Version |
BSD |
|
| Version |
__MidnightBSD_version |
Must be included from <sys/param.h> |
| 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 |
__MSX |
|
Defined by Z88DK |
| Identification |
MSX |
|
Defined by Z88DK |
| Type |
Macro |
| Identification |
__native_client__ |
| 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, 7.x, 8.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 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 |
| Type |
Macro |
Description |
| Identification |
__VM__ |
Host |
| Identification |
__HOS_VM__ |
Host |
| Identification |
__TOS_VM__ |
Target |