Skip to content

Latest commit

 

History

History
724 lines (526 loc) · 20.7 KB

OperatingSystems.md

File metadata and controls

724 lines (526 loc) · 20.7 KB

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
Example

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.

Example
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
Example
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

Example
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>
Example
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

GNU aka GNU/Hurd

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>
Example
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>
Example
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>
Example
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>
Example
QNX _NTO_VERSION
6.2 620
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
Example
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)
Example
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
Example
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
Example
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
Example
Wind/U _WINDU_SOURCE
3.1.2 0x030102
Type Macro Description
Identification __MVS__ Host
Identification __HOS_MVS__ Host
Identification __TOS_MVS__ Target