各個編譯器預定義的表示編譯器型別和版本號的巨集
Most compilers defines macros to indicate the compiler and its version. These are useful to avoid bugs in certain compiler versions, or to check for the existance of certain features.
Table of Content - Compilers
Borland Turbo C
Type | Macro | Format |
---|---|---|
Identification | __TURBOC__ | . |
Version | __TURBOC__ | ? |
Example
Turbo C | __TURBOC__ |
---|---|
2.0 | 397 |
3.0 | 661 |
Borland C++
Type | Macro | Format |
---|---|---|
Identification | __BORLANDC__ | . |
Version | __BORLANDC__ | ? |
Example
Borland C++ | C++ Builder | __BORLANDC__ |
---|---|---|
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 |
Comeau C++
Type | Macro | Format | Description |
---|---|---|---|
Identification | __COMO__ | . | . |
Version | __COMO_VERSION__ | VRR | V = Version RR = Revision |
Example
Comeau C++ | __COMO_VERSION__ |
---|---|
2.3 | 230 |
Compaq C/C++
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 |
Example
Compaq C/C++ | __DECC_VER |
---|---|
6.0-001 | 60090001 |
Cray C
Type | Macro | Description |
---|---|---|
Identification | _CRAYC | . |
Version | _RELEASE | Version |
Version | _RELEASE_MINOR | Revision |
Cygwin
Type | Macro |
---|---|
Identification | __CYGWIN__ |
Diab C/C++
Type | Macro | Format | Description |
---|---|---|---|
Identification | __DCC__ | 1 | . |
Version | __VERSION_NUMBER__ | VRPP | V = Version R = Revision PP = Patch |
Example
Diab C/C++ | __VERSION_NUMBER__ |
---|---|
4.4g | 4426 |
Digital Mars
Type | Macro | Format | Description |
---|---|---|---|
Identification | __DMC__ | . | . |
Identification | __SC__ | . | Obsolete |
Identification | __ZTC__ | . | Obsolete |
Version | __DMC__ | 0xVRP | V = Version R = Revision PP = Patch |
Example
Digital Mars | __DMC__ |
---|---|
7.0 | 0x700 |
7.2 | 0x720 |
8.0 | 0x800 |
DJGPP
Type | Macro | Description |
---|---|---|
Identification | __DJGPP__ | . |
Version | __DJGPP__ | Version |
Version | __DJGPP_MINOR__ | Revision |
Identification | __GO32__ | Defined by DJGPP 1.x |
Example
DJGPP | __DJGPP__ | __DJGPP_MINOR__ |
---|---|---|
2.01 | 2 | 1 |
EKOPath
Type | Macro | Description |
---|---|---|
Identification | __PATHCC__ | . |
Version | __PATHCC__ | Version |
Version | __PATHCC_MINOR__ | Revision |
Version | __PATHCC_PATCHLEVEL__ | Patch |
Example
EKOPath | __PATHCC__ | __PATHCC_MINOR__ | __PATHCC_PATCHLEVEL__ |
---|---|---|---|
2.0 | 2 | 0 | 0 |
EDG C++ Front End
Type | Macro | Format | Description |
---|---|---|---|
Identification | __EDG__ | . | . |
Version | __EDG_VERSION__ | VRR | V = Version RR = Revision |
Example
EDG C++ | __EDG_VERSION__ |
---|---|
2.30 | 230 |
GNU C/C++
Type | Macro | Description |
---|---|---|
Identification | __GNUC__ | . |
Version | __GNUC__ | Version |
Version | __GNUC_MINOR__ | Revision |
Version | __GNUC_PATCHLEVEL__ | Patch (introduced in version 3.0) |
Example
GNU C/C++ | __GNUC__ | __GNUC_MINOR__ | __GNUC_PATCHLEVEL__ |
---|---|---|---|
2.7.x | 2 | 7 | . |
3.0.2 | 3 | 0 | 2 |
Alternative Version
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 |
Example of Alternative Version
GNU C/C++ | __GNUC_VERSION__ |
---|---|
2.7.x | 20700 |
3.0.2 | 30002 |
Green Hill C/C++
Type | Macro | Format | Description |
---|---|---|---|
Identification | __ghs__ | . | . |
Version | __GHS_VERSION_NUMBER__ | VRP | V = Version R = Revision P = Patch |
Version | __GHS_REVISION_DATE__ | Epoch time | . |
Example
Green Hill C/C++ | __GHS_VERSION_NUMBER__ |
---|---|
4.2.1 | 421 |
HP ANSI C
Type | Macro |
---|---|
Identification | __HP_cc |
HP aCC
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 | 012100 |
IBM XL C/C++
Type | Macro | Format | Description |
---|---|---|---|
Identification | __xlC__ | . | . |
Version | __xlC__ | 0xVVRR | VV = Version RR = Revision |
Identification | __IBMC__ | . | From ? |
Identification | __IBMCPP__ | . | From ? |
Version | __IBMC__ __IBMCPP__ |
VRP | V = Version R = Revision P = Patch |
Please note that the z/OS C/C++ compiler also defines __IBMC__
and __IBMCPP__
macros, but with a different syntax. See the entry on the z/OS C/C++ compiler below for further information.
Example
IBM XL C/C++ | __xlC__ | __IBMC__ |
---|---|---|
3.1 | 0x0301 | . |
4.5 | 0x0405 | 450 |
5.0 | 0x0500 | 500 |
IBM z/OS C/C++
This is the XL C/C++ compiler for mainframes (e.g. z/OS). The entry on XL C/C++ has been split into two for clarity.
Type | Macro | Format | Description |
---|---|---|---|
Identification | __IBMC__ | . | . |
Identification | __IBMCPP__ | . | . |
Version | __IBMC__ __IBMCPP__ |
NVRRM | N = Product (0 = C/370, 1 = MVS, 2 = OS/390, 4 = z/OS) V = Version RR = Revision P = Patch Defined for z/OS XL C/C++ |
Version | __COMPILER_VER__ | 0xNVRRPPPP | N = Product (see above) V = Version RR = Revision PPPP = Patch Defined for z/OS XL C/C++ |
Please note 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 C/C++) to distinguish
between the two.
#if defined(__IBMC__) || defined(__IBMCPP__) # if defined(__COMPILER_VER__) /* z/OS C/C++ so __IBMC__ is defined as NVRRM */ # else /* XL C/C++ so __IBMC__ is defined as VRP */ # endif #endif
Example
IBM z/OS XL C/C++ | __IBMC__ | __COMPILER_VER__ |
---|---|---|
1.7 | 41070 | 0x41070000 |
IAR C/C++
Type | Macro | Format | Description |
---|---|---|---|
Identification | __IAR_SYSTEMS_ICC__ | . | . |
Version | __VER__ | VRR | V = Version RR = Revision |
Example
IAR C/C++ | __VER__ |
---|---|
3.34 | 334 |
Intel C/C++
Type | Macro | Format | Description |
---|---|---|---|
Identification | __INTEL_COMPILER | . | . |
Identification | __ICC | . | Obsolete |
Identification | __ECC | . | Obsolete |
Identification | __ICL | . | . |
Version | __INTEL_COMPILER | VRP | V = Version R = Revision P = Patch |
Version | __INTEL_COMPILER_BUILD_DATE | YYYYMMDD | YYYY = Year MM = Month DD = Day |
Example
Intel C/C++ | __INTEL_COMPILER | __INTEL_COMPILER_BUILD_DATE |
---|---|---|
5.0 | 500 | . |
6.0 | 600 | . |
8.0 | 800 | . |
9.0 | 900 | 20060222 |
KAI C++
Type | Macro | Format | Description |
---|---|---|---|
Identification | __KCC | . | . |
Version | __KCC_VERSION | 0xVRPP | V = Version R = Revision PP = Patch (a = 01, b = 02, ...) |
Example
KAI C++ | __KCC_VERSION |
---|---|
4.0d | 4004 |
Keil CARM
Type | Macro | Format | Description |
---|---|---|---|
Identification | __CA__ | . | . |
Identification | __KEIL__ | . | . |
Version | __CA__ | VRR | V = Version R = Revision |
Example
Keil CARM | __CA__ |
---|---|
1.01 | 101 |
Keil C166
Type | Macro | Format | Description |
---|---|---|---|
Identification | __C166__ | . | . |
Version | __C166__ | VRR | V = Version R = Revision |
Example
Keil C166 | __C166__ |
---|---|
5.01 | 501 |
Keil C51
Type | Macro | Format | Description |
---|---|---|---|
Identification | __C51__ | . | . |
Identification | __CX51__ | . | . |
Version | __C51__ | VRR | V = Version R = Revision |
Example
Keil C51 | __C51__ |
---|---|
7.01 | 701 |
LCC
Type | Macro |
---|---|
Identification | __LCC__ |
LLVM
Type | Macro |
---|---|
Identification | __llvm__ |
MetaWare High C/C++
Type | Macro |
---|---|
Identification | __HIGHC__ |
Metrowerks CodeWarrior
Type | Macro | Format | Description |
---|---|---|---|
Identification | __MWERKS__ | . | . |
Version | __MWERKS__ | 1 | Until CodeWarrior 7 |
Version | __MWERKS__ | 0xVRPP | V = Version R = Revision PP = Patch From CodeWarrior 7 |
Example
Metrowerks C/C++ | __MWERKS__ |
---|---|
2.0 | 0x2000 |
2.2 | 0x2200 |
MinGW
Type | Macro | Description |
---|---|---|
Identification | __MINGW32__ | . |
Version | __MINGW32_MAJOR_VERSION | Version |
Version | __MINGW32_MINOR_VERSION | Revision |
Example
MinGW | __MINGW32_MAJOR_VERSION | __MINGW32_MINOR_VERSION |
---|---|---|
2.4 | 2 | 4 |
MIPSpro
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 ? |
Example
MIPSpro | _COMPILER_VERSION | _SGI_COMPILER_VERSION |
---|---|---|
6.0.2 | 602 | . |
7.2.1 | 721 | . |
7.4.4 | . | 744 |
MPW C++
Type | Macro | Format | Description |
---|---|---|---|
Identification | __MRC__ | . | . |
Identification | MPW_C | . | . |
Identification | MPW_CPLUS | . | . |
Version | __MRC__ | 0xVVRR | VV = Version RR = Revision |
Example
MPW C++ | __MRC__ |
---|---|
5.0 | 0x500 |
Microsoft Visual C++
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 ? |
Version | _MSC_FULL_VER | VVRRPPPPP | VV = Version RR = Revision PPPPP = Patch From ? |
Please note that _MSC_FULL_VER
is not officially documented by the vendor.
Example
Visual C++ | _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 |
Microtec C/C++
Type | Macro |
---|---|
Identification | _MRI |
Norcroft C
Type | Macro | Format | Description |
---|---|---|---|
Identification | __CC_NORCROFT | . | . |
Version | __ARMCC_VERSION | V.R | V = Version R = Revision |
Please note that __ARMCC_VERSION
is assigned a floating-point number, so it cannot be used by the preprocessor to compare versions.
Example
Norcroft C | __ARMCC_VERSION |
---|---|
4.69 | 4.69 |
4.90 | 4.90 |
Pacific C
Type | Macro |
---|---|
Identification | __PACIFIC__ |
Palm C/C++
Type | Macro | Format | Description |
---|---|---|---|
Identification | _PACC_VER | . | . |
Version | _PACC_VER | 0xVRRPPBBB | V = Version RR = Revision PP = Patch BBB = Build |
Example
Palm C/C++ | _PACC_VER |
---|---|
1.0.0.13 | 0x1000000D |
Pelles C
Type | Macro | Format | Description |
---|---|---|---|
Identification | __POCC__ | . | . |
Version | __POCC__ | VRR | V = Version RR = Revision |
Example
Pelles C | __POCC__ |
---|---|
3.00 | 300 |
Portland Group C/C++
Type | Macro |
---|---|
Identification | __PGI |
RealView C
Type | Macro | Format | Description |
---|---|---|---|
Identification | __CC_ARM | . | . |
Version | __ARMCC_VERSION | VRPBBB | V = Version R = Revision P = Patch BBB = Build |
Please note that the __ARMCC_VERSION
macro is also used as version indicator for Norcroft C, but that the format is different.
Example
Realview C | __ARMCC_VERSION |
---|---|
3.0 | 300503 |
SAS/C
Type | Macro | Format | Description |
---|---|---|---|
Identification | SASC | . | . |
Identification | __SASC | . | . |
Identification | __SASC__ | . | . |
Version | __VERSION__ | . | Until ? |
Version | __REVISION__ | . | Until ? |
Version | __SASC__ | VRR | V = Version RR = Revision From ? |
Example
SAS/C | __SASC__ | __VERSION__ | __REVISION__ |
---|---|---|---|
5.10 | . | 5 | 10 |
6.50 | 650 | . | . |
SCO OpenServer
Type | Macro |
---|---|
Identification | _SCO_DS |
Small Device C Compiler
Type | Macro | Format | Description |
---|---|---|---|
Identification | SDCC | . | . |
Version | SDCC | VRP | V = Version R = Revision P = Patch |
Example
SDCC Version | SDCC Macro |
---|---|
2.5.6 | 256 |
Sun Studio
Type | Macro | Format | Description |
---|---|---|---|
Identification | __SUNPRO_C | . | C compiler |
Version | __SUNPRO_C | 0xVRP | V = Version R = Revision P = Patch |
Identification | __SUNPRO_CC | . | C++ compiler |
Version | __SUNPRO_CC | As __SUNPRO_C | . |
Example
Sun Studio | __SUNPRO_C |
---|---|
4.2 | 0x420 |
5.0 | 0x500 |
Systems/C and Systems/C++
Type | Macro | Format | Description |
---|---|---|---|
Identification | __SYSC__ | . | C compiler |
Version | __SYSC_VER__ | VRRPP | V = Version RR = Revision PP = Patch |
Example
Systems/C | __SYSC_VER__ |
---|---|
1.80.32 | 18032 |
TenDRA C/C++
Type | Macro |
---|---|
Identification | __TenDRA__ |
Tiny C
Type | Macro |
---|---|
Identification | __TINYC__ |
Ultimate C/C++
Type | Macro | Description |
---|---|---|
Identification | _UCC | . |
Version | _MAJOR_REV = V _MINOR_REV = R |
V = Version R = Revision |
Example
Ultimate C/C++ | _MAJOR_REV | _MINOR_REV |
---|---|---|
2.1 | 2 | 1 |
USL C
Type | Macro | Format | Description |
---|---|---|---|
Identification | __USLC__ | . | . |
Version | __SCO_VERSION | 0xVRRYYYYMM | V = Version RR = Revision YYYY = Year MM = Month |
Example
USL C | __SCO_VERSION |
---|---|
3.2 | 302199801 |
Watcom C++
Type | Macro | Format | Description |
---|---|---|---|
Identification | __WATCOMC__ | . | . |
Version | __WATCOMC__ | VVRR | VV = Version RR = Revision |
Example
Watcom C++ | __WATCOMC__ |
---|---|
10.5 | 1050 |
11.0 | 1100 |