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 |