Please send updates/corrections to predef-contribute or through pull requests on GitHub.
Type | Macro |
---|---|
Identification | _ACC_ |
Type | Macro | Format | Description |
---|---|---|---|
Identification | __CMB__ |
||
Version | __VERSION__ |
VRRR | V=Version RRR=Revision |
Version | __REVISION__ |
P | P=Patch |
Version | __BUILD__ |
VRRRPPP | Build number |
Altium MicroBlaze C | __VERSION__ |
__REVISION__ |
__BUILD__ |
---|---|---|---|
1.0r2 | 1000 | 2 | |
1.22.2 | 1022001 |
Type | Macro | Format | Description |
---|---|---|---|
Identification | __CHC__ |
||
Version | __VERSION__ |
VRRR | V=Version RRR=Revision |
Version | __REVISION__ |
P | P=Patch Beta releases set this to -1 |
Version | __BUILD__ |
VRRRPPP | Build number |
Altium C-to-Hardware | __VERSION__ |
__REVISION__ |
__BUILD__ |
---|---|---|---|
2.1r1 | 2001 | 1 | |
1.22.2 | 1022001 |
Type | Macro |
---|---|
Identification | __ACK__ |
Type | Macro | Format | Description |
---|---|---|---|
Identification | __CC_ARM |
||
Version | __ARMCC_VERSION |
VRPBBB | V = Version R = Revision P = Patch BBB = Build |
Notice that the __ARMCC_VERSION
macro is also used as version indicator for Norcroft C, but that the format is different.
Realview C | __ARMCC_VERSION |
---|---|
3.0 | 300503 |
Type | Macro | Format | Description |
---|---|---|---|
Identification | AZTEC_C __AZTEC_C__ |
||
Version | __VERSION |
VRR | V = Version RR = Revision |
Aztec C | __VERSION |
---|---|
5.20 | 520 |
Type | Macro | Format |
---|---|---|
Identification | __BORLANDC__ |
|
Version | __BORLANDC__ |
? |
Identification | __CODEGEARC__ |
|
Version | __CODEGEARC__ |
From C++ Builder 2006 |
Borland C++ | C++ Builder | __BORLANDC__ |
__CODEGEARC__ |
---|---|---|---|
2.0 | 0x200 | ||
3.0 | 0x400 | ||
3.1 | 0x410 | ||
4.0 | 0x452 | ||
5.0 | 0x500 | ||
5.02 | 1.0 | 0x520 | |
3.0 | 0x530 | ||
4.0 | 0x540 | ||
5.5 | 5.0 | 0x550 | |
5.51 | 0x551 | ||
5.6.4 | 0x562 | ||
2006 | 0x570 | 0x570 | |
2007 | 0x590 | 0x590 | |
2009 | 0x613 | 0x613 | |
2010 | 0x621 | 0x621 | |
XE | 0x630 | 0x630 | |
XE2 | 0x640 | 0x640 | |
XE3 | 0x650 | 0x650 | |
XE4 | 0x660 | 0x660 |
Type | Macro | Format | Description |
---|---|---|---|
Identification | __CC65__ |
||
Version | __CC65__ |
0xVRP | V = Version R = Revision P = Patch |
Version | __CC65__ |
---|---|
2.10.1 | 0x2A1 |
Type | Macro | Format | Description |
---|---|---|---|
Identification | __clang__ |
||
Version | __clang_major__ |
V | V = Major version |
Version | __clang_minor__ |
R | R = Minor version |
Version | __clang_patchlevel__ |
P | P = Patch level |
Version | __clang_version__ |
V.R.P (tags/RELEASE_VRP/final) | V = Major version R = Minor version P = Patch level |
Notice that clang also defines the GNU C version macros, but you should use the clang feature checking macros to detect the availability of various features.
The values of the __clang_major__
, __clang_minor__
, and __clang_patchlevel__
macros are not consistent across distributions of the Clang compiler. For example, the Clang 3.1 distribution available at http://clang.llvm.org defines __clang_major__
and __clang_minor__
as 3
and 1
respectively. The version of Clang distributed with Apple Xcode 4.4 is branded as "Apple Clang 4.0" and derives from the open source Clang 3.1 distribution, but defines these macros with the values 4
and 0
respectively. Apple's Clang distribution can be identified by the presence of the __apple_build_version__
macro.
The meaning of the __clang__
and related macros has changed subtly over the years, from identifying the Clang compiler to identifying compilers that use the Clang infrastructure. For example, IBM XL C/C++ also defines these macros. IBM XL C/C++ for Linux defines them starting from version 13.1.1. IBM XL C/C++ for AIX defines them starting from version 16.1.
Type | Macro | Format | Description |
---|---|---|---|
Identification | __COMO__ |
||
Version | __COMO_VERSION__ |
VRR | V = Version RR = Revision |
Comeau C++ | __COMO_VERSION__ |
---|---|
2.3 | 230 |
Type | Macro | Format | Description |
---|---|---|---|
Identification | __DECC |
C compiler | |
Version | __DECC_VER |
VVRRTPPPP | VV = Version RR = Revision T = Type (9 = official) PPPP = Patch |
Identification | __DECCXX |
C++ compiler | |
Version | __DECCXX_VER |
As __DECC_VER | |
Identification | __VAXC |
Obsolete | |
Identification | VAXC |
Obsolete |
Compaq C/C++ | __DECC_VER |
---|---|
6.0-001 | 60090001 |
Type | Macro |
---|---|
Identification | __convexc__ |
Type | Macro |
---|---|
Identification | __COMPCERT__ |
Type | Macro |
---|---|
Identification | __COVERITY__ |
Type | Macro | Description |
---|---|---|
Identification | _CRAYC |
|
Version | _RELEASE |
Version |
Version | _RELEASE_MINOR |
Revision |
Type | Macro | Format | Description |
---|---|---|---|
Identification | __DCC__ |
1 | |
Version | __VERSION_NUMBER__ |
VRPP | V = Version R = Revision PP = Patch |
Diab C/C++ | __VERSION_NUMBER__ |
---|---|
4.4g | 4426 |
Type | Macro |
---|---|
Identification | _DICE |
Type | Macro | Format | Description |
---|---|---|---|
Identification | __DMC__ |
||
Version | __DMC__ |
0xVRP | V = Version R = Revision P = Patch |
Digital Mars | __DMC__ |
---|---|
7.0 | 0x700 |
7.2 | 0x720 |
8.0 | 0x800 |
Type | Macro | Format | Description |
---|---|---|---|
Identification | __SYSC__ |
||
Version | __SYSC_VER__ |
VRRPP | V = Version RR = Revision PP = Patch |
Systems/C | __SYSC_VER__ |
---|---|
1.80.32 | 18032 |
Type | Macro | Description |
---|---|---|
Identification | __DJGPP__ |
|
Version | __DJGPP__ |
Version |
Version | __DJGPP_MINOR__ |
Revision |
Identification | __GO32__ |
Defined by DJGPP 1.x |
DJGPP | __DJGPP__ |
__DJGPP_MINOR__ |
---|---|---|
2.01 | 2 | 1 |
Type | Macro | Format | Description |
---|---|---|---|
Identification | __EDG__ |
||
Version | __EDG_VERSION__ |
VRR | V = Version RR = Revision |
EDG C++ | __EDG_VERSION__ |
---|---|
2.30 | 230 |
2.45 | 245 |
Type | Macro | Description |
---|---|---|
Identification | __PATHCC__ |
|
Version | __PATHCC__ |
Version |
Version | __PATHCC_MINOR__ |
Revision |
Version | __PATHCC_PATCHLEVEL__ |
Patch |
EKOPath | __PATHCC__ |
__PATHCC_MINOR__ |
__PATHCC_PATCHLEVEL__ |
---|---|---|---|
2.0 | 2 | 0 | 0 |
Type | Macro |
---|---|
Identification | __FCC_VERSION |
Type | Macro | Description |
---|---|---|
Identification | __GNUC__ |
|
Version | __GNUC__ |
Version |
Version | __GNUC_MINOR__ |
Revision |
Version | __GNUC_PATCHLEVEL__ |
Patch (introduced in version 3.0) |
Notice that the meaning of the __GNUC__
macro has changed subtly over the years, from identifying the GNU C/C++ compiler to identifying any compiler that implements the GNU compiler extensions (see the Feature request - a macro defined for GCC discussion for further information). For example, the Intel C++ on Linux also defines these macros from version 8.1 (see the Intel C++ Compiler 8.1 for Linux Release Notes and Intel Compilers for Linux: Compatibility with GNU Compilers.)
GNU C/C++ | __GNUC__ |
__GNUC_MINOR__ |
__GNUC_PATCHLEVEL__ |
---|---|---|---|
2.7.x | 2 | 7 | N/A |
3.0.2 | 3 | 0 | 2 |
If you prefer a single version macro, you can define the following yourself.
#if defined(__GNUC__)
# if defined(__GNUC_PATCHLEVEL__)
# define __GNUC_VERSION__ (__GNUC__ * 10000 \
+ __GNUC_MINOR__ * 100 \
+ __GNUC_PATCHLEVEL__)
# else
# define __GNUC_VERSION__ (__GNUC__ * 10000 \
+ __GNUC_MINOR__ * 100)
# endif
#endif
The format of this new macro is:
Type | Macro | Format | Description |
---|---|---|---|
Version | __GNUC_VERSION__ |
VVRRPP | VV = Version RR = Revision PP = Patch |
GNU C/C++ | __GNUC_VERSION__ |
---|---|
2.7.x | 20700 |
3.0.2 | 30002 |
Type | Macro | Format | Description |
---|---|---|---|
Identification | __ghs__ |
||
Version | __GHS_VERSION_NUMBER__ |
VRP | V = Version R = Revision P = Patch |
Version | __GHS_REVISION_DATE__ |
Epoch time |
Green Hill C/C++ | __GHS_VERSION_NUMBER__ |
---|---|
4.2.1 | 421 |
Type | Macro |
---|---|
Identification | __HP_cc |
Type | Macro | Format | Description |
---|---|---|---|
Identification | __HP_aCC |
||
Version | __HP_aCC |
1 | From version A.01.15 (and A.03.13) |
Version | __HP_aCC |
VVRRPP | VV = Version RR = Revision PP = Patch From version A.01.21 (and A.03.25) |
HP aCC | __HP_aCC |
---|---|
A.01.21 | 12100 |
Type | Macro | Format | Description |
---|---|---|---|
Identification | __IAR_SYSTEMS_ICC__ |
||
Version | __VER__ |
VRR | V = Version RR = Revision |
IAR C/C++ | __VER__ |
---|---|
3.34 | 334 |
The entry on XL C/C++ has been split into three for clarity. This entry covers the following versions: IBM XL C/C++ for Linux for little endian distributions version 13.1.1 and later IBM XL C/C++ for AIX version 16.1 and later (Clang-based compiler invocation only, see next section for legacy compiler invocation) Clang-based versions of IBM XL C/C++ define the Clang macros listed in the Clang section. Specify -qxlcompatmacros to also define the legacy macros listed in IBM XL C/C++ (legacy versions). This is useful when you migrate programs from IBM XL C/C++ (legacy versions) to IBM XL C/C++ (Clang-based versions).
Type | Macro | Format | Description |
---|---|---|---|
Identification | __ibmxl__ |
C and C++ compiler | |
__clang__ |
|||
Version | __ibmxl_vrm__ |
0xVVRRMM00 | VV = Version RR = Release MM = Modification |
__ibmxl_version__ |
V | V = Version | |
__ibmxl_release__ |
R | R = Release | |
__ibmxl_modification__ |
M | M = Modification | |
__ibmxl_ptf_fix_level__ |
F | F = Fix Pack |
IBM XL C/C++ | __ibmxl_vrm__ |
---|---|
13.1.6.1 | 0x0D010600 |
16.1.0.0 | 0x10010000 |
The entry on XL C/C++ has been split into three for clarity. This entry covers the following versions: IBM XL C/C++ for Linux for big endian distributions IBM XL C/C++ for AIX (Note: starting in version 16.1, IBM XL C/C++ for AIX also offers a Clang-based compiler invocation, see the Clang-based versions section above for that compiler invocation)
Clang-based versions of IBM XL C/C++ will also define the legacy macros listed in this section when -qxlcompatmacros is specified.
Type | Macro | Format | Description |
---|---|---|---|
Identification | __xlC__ |
C and C++ compiler | |
Version | __IBMC__ |
0xVVRRMM | C compiler VV = Version RR = Release MM = Modification |
__IBMCPP__ |
0xVVRRMM | C++ compiler VV = Version RR = Release MM = Modification |
|
__xlc__ |
0xVVRRMMFF | C compiler VV = Version RR = Release MM = Modification FF = Fix Pack |
|
__xlC__ |
0xVVRR | C and C++ compiler VV = Version RR = Release |
|
__xlC_ver__ |
0x0000MMFF | MM = Modification FF = Fix Pack |
IBM XL C/C++ | __IBMCPP__ |
__xlC__ |
__xlC_ver__ |
---|---|---|---|
13.1.3.5 | 0x0D0103 | 0x0D01 | 0x00000305 |
12.1.0.4 | 0x0C0100 | 0x0C01 | 0x00000004 |
The entry on XL C/C++ has been split into three for clarity. This entry covers the XL C/C++ compiler for mainframes (e.g. z/OS).
Type | Macro | Format | Description |
---|---|---|---|
Identification | __IBMC__ |
C compiler | |
__IBMCPP__ |
C++ compiler | ||
Version | __IBMC__ __IBMCPP__ |
NVRRM | N = Product (0 = C/370, 1 = MVS, 2 = OS/390, 4 = z/OS) V = Version RR = Revision M = Modification |
__COMPILER_VER__ |
0xNVRRMMFF | N = Product (see above) V = Version RR = Revision MM = Modification FF = Fix Pack |
Notice that XL C/C++ also defines __IBMC__
and __IBMCPP__
macros, but with a different syntax. You can use __xlC__
(only defined for XL C/C++) or __COMPILER_VER__
(only defined for z/OS XL C/C++) to distinguish between the two. Alternatively, the macro identifying z/OS (__MVS__
) can be used to distinguish between them.
#if defined(__IBMC__) || defined(__IBMCPP__)
# if defined(__COMPILER_VER__)
/* z/OS XL C/C++ so __IBMC__ is defined as NVRRM */
# else
/* z/OS XL C/C++ so __IBMC__ is defined as VRM */
# endif
#endif
IBM z/OS XL C/C++ | __IBMC__ |
__COMPILER_VER__ |
---|---|---|
2.3 | 42030 | 0x42030000 |
Type | Macro |
---|---|
Identification | __IMAGECRAFT__ |
Type | Macro | Format | Description |
---|---|---|---|
Identification | __INTEL_COMPILER |
||
Identification | __ICC |
||
Identification | __ECC |
Obsolete | |
Identification | __ICL |
||
Version | __INTEL_COMPILER |
VR | V = Version R = Revision |
Version | __INTEL_COMPILER_UPDATE |
P | P = Patch |
Version | __INTEL_COMPILER_BUILD_DATE |
YYYYMMDD | YYYY = Year MM = Month DD = Day |
Intel C/C++ | __INTEL_COMPILER /__ICC |
__INTEL_COMPILER_UPDATE |
__INTEL_COMPILER_BUILD_DATE |
---|---|---|---|
5.0 | 500 | ||
6.0 | 600 | ||
8.0 | 800 | ||
9.0 | 900 | 20060222 | |
13.0.1 | 1300 | 20121010 | |
16.0.3 | 1600 | 3 | 20160415 |
17.0.0 | 1700 | 0 | 20160721 |
18.0.0 | 1800 | 0 | 20170811 |
19.0.0 | 1900 | 0 | 20180804 |
19.0.1 | 1900 | 0 | 20181018 |
2021.1.2 | 2021 | 1 | 20201208 |
2021.2.0 | 2021 | 2 | 20210228 |
2021.3.0 | 2021 | 3 | 20210609 |
Type | Macro | Format | Description |
---|---|---|---|
Identification | __KCC |
||
Version | __KCC_VERSION |
0xVRPP | V = Version R = Revision PP = Patch (a = 01, b = 02, ...) |
KAI C++ | __KCC_VERSION |
---|---|
4.0d | 4004 |
Type | Macro | Format | Description |
---|---|---|---|
Identification | __CA__ |
||
Identification | __KEIL__ |
||
Version | __CA__ |
VRR | V = Version RR = Revision |
Keil CARM | __CA__ |
---|---|
1.01 | 101 |
Type | Macro | Format | Description |
---|---|---|---|
Identification | __C166__ |
||
Version | __C166__ |
VRR | V = Version RR = Revision |
Keil C166 | __C166__ |
---|---|
5.01 | 501 |
Type | Macro | Format | Description |
---|---|---|---|
Identification | __C51__ |
||
Identification | __CX51__ |
||
Version | __C51__ |
VRR | V = Version RR = Revision |
Keil C51 | __C51__ |
---|---|
7.01 | 701 |
Type | Macro |
---|---|
Identification | __LCC__ |
Type | Macro |
---|---|
Identification | __llvm__ |
The Clang compiler has an expectation that it operates in conjunction with the LLVM compiler, so the Clang compiler defines __llvm__
too. IBM XL C/C++ (Clang-based versions) use Clang infrastructure, so IBM XL C/C++ for Linux versions 13.1.1 to 16.1 also define __llvm__
. Starting from version 16.1.1, IBM XL C/C++ for Linux no longer defines __llvm__
.
Type | Macro | Format | Description |
---|---|---|---|
Identification | __LCC__ |
||
Identification | __MCST__ |
From 1.25 | |
Version | __LCC__ |
VRR | V = Version R = Revision |
Version | __LCC_MINOR__ |
P | P = Patch |
Not to be confused with LCC. MCST lcc compiler uses Edison Design Group C++ frontend, so __EDG__
is also expected to be defined.
MCST lcc | __LCC__ |
__LCC_MINOR__ |
---|---|---|
1.25.19 | 125 | 19 |
1.26.04 | 126 | 4 |
Type | Macro |
---|---|
Identification | __HIGHC__ |
Type | Macro | Format | Description |
---|---|---|---|
Identification | __MWERKS__ |
||
Identification | __CWCC__ |
From 4.2.0 | |
Version | __MWERKS__ |
1 | Until CodeWarrior 7 |
Version | __MWERKS__ |
0xVRPP | V = Version R = Revision PP = Patch From CodeWarrior 7 |
Version | __CWCC__ |
0xVRPP | V = Version R = Revision PP = Patch From 4.2.0 |
Metrowerks C/C++ | __MWERKS__ |
__CWCC__ |
---|---|---|
2.0 | 0x2000 | |
2.2 | 0x2200 | |
4.2.0 | 0x4200 | 0x4200 |
Type | Macro | Format | Description |
---|---|---|---|
Identification | _MSC_VER |
||
Version | _MSC_VER |
VVRR | VV = Version RR = Revision |
Version | _MSC_FULL_VER |
VVRRPPPP | VV = Version RR = Revision PPPP = Patch From Visual C++ 6.0 Processor Pack |
Version | _MSC_FULL_VER |
VVRRPPPPP | VV = Version RR = Revision PPPPP = Patch From Visual C++ 8.0 |
Version | _MSC_BUILD |
B | B = Build number From Visual C++ 9.0 |
Intel's compiler also defines _MSC_VER
and _MSC_FULL_VER
on Windows. (1)
You can exclude it by checking that __INTEL_COMPILER
is not defined.
Clang also defines _MSC_VER
and _MSC_FULL_VER
when run as clang-cl.exe
or when the target tuple ends in -msvc
. You can exclude it by checking that __clang__
is not defined.
Visual C++ 1 2 | _MSC_VER |
_MSC_FULL_VER |
---|---|---|
1.0 | 800 | |
3.0 | 900 | |
4.0 | 1000 | |
4.2 | 1020 | |
5.0 | 1100 | |
6.0 | 1200 | |
6.0 SP6 | 1200 | 12008804 |
7.0 | 1300 | 13009466 |
7.1 (2003) | 1310 | 13103077 |
8.0 (2005) | 1400 | 140050727 |
9.0 (2008) | 1500 | 150021022 |
9.0 SP1 | 1500 | 150030729 |
10.0 (2010) | 1600 | 160030319 |
10.0 (2010) SP1 | 1600 | 160040219 |
11.0 (2012) | 1700 | 170050727 |
12.0 (2013) | 1800 | 180021005 |
14.0 (2015) | 1900 | 190023026 |
14.0 (2015 Update 1) | 1900 | 190023506 |
14.0 (2015 Update 2) | 1900 | 190023918 |
14.0 (2015 Update 3) | 1900 | 190024210 |
15.0 (2017) | 1910 | 191025017 |
15.3 (2017) | 1911 | |
15.5 (2017) | 1912 | |
15.6 (2017) | 1913 | |
15.7 (2017) | 1914 | 191426428 |
15.8 (2017) | 1915 | 191526726 |
15.9 (2017) | 1916 | 191627023 |
16.0 (2019) | 1920 | 192027508 |
16.1 (2019) | 1921 | 192127702 |
16.2 (2019) | 1922 | 192227905 |
16.3 (2019) | 1923 | 192328105 |
16.4 (2019) | 1924 | 192428314 |
16.5 (2019) | 1925 | 192528614 |
16.6 (2019) | 1926 | 192628808 |
16.7 (2019) | 1927 | 192729117 |
16.8 (2019) | 1928 | 192829333 |
16.9 (2019) | 1928 | 192829919 |
16.10 (2019) | 1929 | 192930040 |
16.11 (2019) | 1929 | 192930133 |
17.0 (2022) | 1930 | |
17.1 (2022) | 1931 | 193131107 |
17.2 (2022) | 1932 | 193231332 |
Type | Macro |
---|---|
Identification | _MRI |
Type | Macro |
---|---|
Identification | __NDPC__ __NDPX__ |
MinGW (formerly known as MinGW32) is a toolchain for creating 32 Bit Windows executables. The MinGW-w64 projects offers toolchains for creating 32 Bit and 64 Bit Windows executables. The following table shows which macros are defined by each toolchain:
Type | Macro | Description | MinGW32 | MinGW-w64 32 Bit | MinGW-w64 64 Bit |
---|---|---|---|---|---|
Identification | __MINGW32__ |
defined | defined | defined | |
Version | __MINGW32_MAJOR_VERSION |
Version | defined | defined | defined |
Version | __MINGW32_MINOR_VERSION |
Revision | defined | defined | defined |
Identification | __MINGW64__ |
- | - | defined | |
Version | __MINGW64_VERSION_MAJOR |
Version | - | defined | defined |
Version | __MINGW64_VERSION_MINOR |
Revision | - | defined | defined |
Notice that __MINGW32_MAJOR_VERSION
, __MINGW32_MINOR_VERSION
, __MINGW64_VERSION_MAJOR
, and __MINGW64_VERSION_MINOR
are only defined if appropriate headers are included. Appropriate headers are
<stdlib.h>
, <stdio.h>
, <windows.h>
, <windef.h>
, and probably more.
__MINGW32_MAJOR_VERSION |
__MINGW32_MINOR_VERSION |
__MINGW64_VERSION_MAJOR |
__MINGW64_VERSION_MINOR |
Description |
---|---|---|---|---|
2 | 4 | MinGW32 2.4 | ||
3 | 20 | MinGW32 3.20 | ||
3 | 11 | 2 | 0 | MinGW-w64 2.0 |
Type | Macro | Format | Description |
---|---|---|---|
Identification | __sgi |
||
Identification | sgi |
||
Version | _COMPILER_VERSION |
VRP | V = Version R = Revision P = Patch Until ? |
Version | _SGI_COMPILER_VERSION |
VRP | V = Version R = Revision P = Patch From ? |
MIPSpro | _COMPILER_VERSION |
_SGI_COMPILER_VERSION |
---|---|---|
6.0.2 | 602 | |
7.2.1 | 721 | |
7.4.4 | 744 |
Type | Macro |
---|---|
Identification | MIRACLE |
Type | Macro | Format | Description |
---|---|---|---|
Identification | __MRC__ |
||
Identification | MPW_C |
||
Identification | MPW_CPLUS |
||
Version | __MRC__ |
0xVVRR | VV = Version RR = Revision |
MPW C++ | __MRC__ |
---|---|
5.0 | 0x500 |
Type | Macro | Format | Description |
---|---|---|---|
Identification | __CC_NORCROFT |
||
Version | __ARMCC_VERSION |
V.R | V = Version R = Revision |
Notice that __ARMCC_VERSION
is assigned a floating-point number, so it cannot be used by the preprocessor to compare versions.
Norcroft C | __ARMCC_VERSION |
---|---|
4.69 | 4.69 |
4.90 | 4.90 |
Type | Macro |
---|---|
Identification | __NWCC__ |
Type | Macro |
---|---|
Identification | __NVCOMPILER |
Type | Macro | Format | Description |
---|---|---|---|
Identification | __OPEN64__ |
Contains the full version as a string | |
Identification | __OPENCC__ |
||
Version | __OPENCC__ |
V | V = Version |
Version | __OPENCC_MINOR__ |
R | R = Revision |
Version | __OPENCC_PATCHLEVEL__ |
P.B | P = Patch B = Build |
Notice that __OPENCC_PATCHLEVEL__
can be a floating-point number (e.g. 5.2
for Open64 version 4.2.5.2) so it cannot be used by the preprocessor to compare patch-levels.
Type | Macro |
---|---|
Identification | ORA_PROC |
Type | Macro | Format | Description |
---|---|---|---|
Identification | __SUNPRO_C |
C compiler | |
Version | __SUNPRO_C |
0xVRP | V = Version R = Revision P = Patch Until version 5.9 |
Version | __SUNPRO_C |
0xVRRP | V = Version RR = Revision P = Patch From later releases |
Identification | __SUNPRO_CC |
C++ compiler | |
Version | __SUNPRO_CC |
As __SUNPRO_C |
Compiler version | Solaris Studio | __SUNPRO_C |
---|---|---|
4.2 | 4.2 | 0x420 |
5.0 | 5.0 | 0x500 |
5.2 | 6.1 | 0x520 |
5.3 | 6.2 | 0x530 |
5.4 | 7 | 0x540 |
5.5 | 8 | 0x550 |
5.6 | 9 | 0x560 |
5.7 | 10 | 0x570 |
5.8 | 11 | 0x580 |
5.9 | 12 | 0x590 |
5.10 | 12.1 | 0x5100 |
5.11 | 12.2 | 0x5110 |
5.12 | 12.3 | 0x5120 |
The name of Oracle Solaris Studio has changed over the years (e.g. Sun Studio, Sun Workshop, Forte Developer) but we do not make this distinction in the table above.
Type | Macro |
---|---|
Identification | __PACIFIC__ |
Type | Macro | Format | Description |
---|---|---|---|
Identification | _PACC_VER |
||
Version | _PACC_VER |
0xVRRPPBBB | V = Version RR = Revision PP = Patch BBB = Build |
Palm C/C++ | _PACC_VER |
---|---|
1.0.0.13 | 0x1000000D |
Type | Macro | Format | Description |
---|---|---|---|
Identification | __ORANGEC__ |
VRR | V = Version RR = Revision |
Version | __ORANGEC_MAJOR__ |
V | V = Version |
Version | __ORANGEC_MINOR__ |
R | R = Revision |
Version | __ORANGEC_PATCHLEVEL__ |
P | P = Patch |
Version | __VERSION__ |
"V.R.P.B" | V = Version R = Revision P = Patch B = Build |
Type | Macro | Format | Description |
---|---|---|---|
Identification | __POCC__ |
||
Version | __POCC__ |
VRR | V = Version RR = Revision |
Pelles C | __POCC__ |
---|---|
3.00 | 300 |
Type | Macro | Description |
---|---|---|
Identification | __PGI |
|
Version | __PGIC__ |
Version |
Version | __PGIC_MINOR__ |
Revision |
Version | __PGIC_PATCHLEVEL__ |
Patch |
PGI C/C++ | __PGIC__ |
__PGIC_MINOR__ |
__PGIC_PATCHLEVEL__ |
---|---|---|---|
7.0.1 | 7 | 0 | 1 |
11.9 | 11 | 9 | 0 |
Type | Macro | Format | Description |
---|---|---|---|
Identification | __RENESAS__ |
||
Identification | __HITACHI__ |
||
Version | __RENESAS_VERSION__ |
0xVVRR | V = Version R = Revision P = Patch |
Version | __RENESAS_VERSION__ |
0xVVRRPP00 | From ? |
Version | __HITACHI_VERSION__ |
0xVVRR | As above |
Renesas C/C++ | __HITACHI_VERSION__ |
__RENESAS_VERSION__ |
---|---|---|
5.1C | 0x0501 | |
8.0 | 0x8000 | 0x8000 |
1.00.00 | 0x01000000 |
Type | Macro | Format | Description |
---|---|---|---|
Identification | SASC |
||
Identification | __SASC |
||
Identification | __SASC__ |
||
Version | __VERSION__ |
Until ? | |
Version | __REVISION__ |
Until ? | |
Version | __SASC__ |
VRR | V = Version RR = Revision From ? |
SAS/C | __SASC__ |
__VERSION__ |
__REVISION__ |
---|---|---|---|
5.10 | 5 | 10 | |
6.50 | 650 |
Type | Macro |
---|---|
Identification | _SCO_DS |
Type | Macro | Format | Description |
---|---|---|---|
Identification | __SDCC |
||
Identification | SDCC |
Obsolete, due to be removed | |
Version | __SDCC |
SDCC_V_R_P | V = Version R = Revision P = Patch |
Version | __SDCC_VERSION_MAJOR |
V | Major version number |
Version | __SDCC_VERSION_MINOR |
R | Minor version number |
Version | __SDCC_VERSION_PATCH |
P | Patch level number |
Version | __SDCC_REVISION |
S | SVN revision number |
Version | SDCC |
VRP | Obsolete, due to be removed V = Version R = Revision P = Patch |
SDCC Version | __SDCC |
__SDCC_VERSION_MAJOR |
__SDCC_VERSION_MINOR |
__SDCC_VERSION_PATCH |
__SDCC_REVISION |
---|---|---|---|---|---|
4.2.0 #13081 | SDCC_4_2_0 | 4 | 2 | 0 | 13081 |
Type | Macro |
---|---|
Identification | __SNC__ |
Type | Macro | Description |
---|---|---|
Identification | __VOSC__ |
|
Version | __VOSC__ |
0 = K&R compiler 1 = ANSI C compiler |
Type | Macro | Format | Description |
---|---|---|---|
Identification | __SC__ |
||
Version | __SC__ |
0xVVRR | VV = Version RR = Revision |
Type | Macro |
---|---|
Identification | __TenDRA__ |
Type | Macro | Format | Description |
---|---|---|---|
Identification | __TI_COMPILER_VERSION__ |
||
Identification | _TMS320C6X |
All C6000 compilers | |
Version | __TI_COMPILER_VERSION__ |
VVVRRRPPP | VVV = Version RRR = Revision PPP = Patch |
TI C/C++ | __TI_COMPILER_VERSION__ |
---|---|
4.9.1 | 4009001 |
7.3.1 | 7003001 |
Type | Macro | Description |
---|---|---|
Version | THINKC3 |
Version 3.x |
Version | THINKC4 |
Version 4.x |
Type | Macro |
---|---|
Identification | __TINYC__ |
Type | Macro | Format | Description |
---|---|---|---|
Identification | __TURBOC__ |
UPDATE | |
Version | __TURBOC__ |
0xVVRR | VV = Version RR = Revision This pattern does not apply to the values between 0x295 and 0x400. |
Turbo C | Turbo C++ | __TURBOC__ |
---|---|---|
2.01 | 0x201 | |
1.00 | 0x295 | |
1.01 | 0x296 | |
2.00 | 0x297 |
Type | Macro | Description |
---|---|---|
Identification | _UCC |
|
Version | _MAJOR_REV = V_MINOR_REV = R |
V = Version R = Revision |
Ultimate C/C++ | _MAJOR_REV |
_MINOR_REV |
---|---|---|
2.1 | 2 | 1 |
Type | Macro | Format | Description |
---|---|---|---|
Identification | __USLC__ |
||
Version | __SCO_VERSION__ |
VRRYYYYMM | V = Version RR = Revision YYYY = Year MM = Month |
USL C | __SCO_VERSION__ |
Description |
---|---|---|
3.2 | 302199801 | |
3.4 | 304200805 | UnixWare 7.1.4 UDK C++ (CC) |
4.2 | 402200805 | UnixWare 7.1.4 UDK C (cc) |
Type | Macro |
---|---|
Identification | __VBCC__ |
Type | Macro | Format | Description |
---|---|---|---|
Identification | __WATCOMC__ |
||
Version | __WATCOMC__ |
VVRR | VV = Version RR = Revision |
Notice that Watcom C++ became Open Watcom C++ after version 11.0, and the official version numbering (but not the version macro) was restated at version 1.0.
Watcom C++ | Open Watcom C++ | __WATCOMC__ |
---|---|---|
10.5 | 1050 | |
11.0 | 1100 | |
1.0 | 1200 | |
1.7 | 1270 |
Type | Macro | Format | Description |
---|---|---|---|
Identification | __SCCZ80 SCCZ80 |
Using sccz80 compiler | |
Identification | __SDCC |
Using sdcc compiler |
Type | Macro | Format | Description |
---|---|---|---|
Identification | __ZTC__ |
||
Version | __ZTC__ |
0xVRP | V = Version R = Revision P = Patch |