C/C++跨平台的的预编译宏
2015-12-02 15:55
513 查看
我们在编译一些跨平台的程序的时候难免会遇到_WIN32 __linux__什么之类的SDK或者编译器环境预定义的宏。有很多,之前还分不清_WIN32 和WIN32的区别。不过这里还好有个列表,做个备忘。
Please send updates/corrections to predef-contribute.
Example
If
Notice that Android is based on Linux, and that the Linux macros also are defined for Android.
Example
Example
Example
For more information see the FreeBSD porters handbook.
Notice that FreeBSD also defines
Example
Example
Example
Use the SVR4 macros to distinguish between Solaris and SunOS.
Example
Notice that the
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.
Example
Example
Example
Example
http://stackoverflow.com/questions/5919996/how-to-detect-reliably-mac-os-x-ios-linux-windows-in-c-preprocessor http://gcc.gnu.org/onlinedocs/cpp/Predefined-Macros.html http://sourceforge.net/p/predef/wiki/OperatingSystems/
Please send updates/corrections to predef-contribute.
AIX
Type | Macro | Description |
---|---|---|
Identification | _AIX | |
Version | _AIX'VR' | V = Version R = Revision |
Identification | __TOS_AIX__ | Defined by xlC |
If
_AIXis 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
_AIX43is defined, then
_AIX41will also be defined.
AIX Version | Macro |
---|---|
3.2.x | _AIX3 _AIX32 |
4.1 | _AIX41 |
4.3 | _AIX43 |
Android
Type | Macro | Format | Description |
---|---|---|---|
Identification | __ANDROID__ | ||
Version | __ANDROID_API__ | V | V = API Version Must be included from <android/api-level.h> |
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 |
Amdahl UTS
Type | Macro |
---|---|
Identification | UTS |
AmigaOS
Type | Macro | Description |
---|---|---|
Identification | AMIGA | |
Identification | __amigaos__ | Defined by GNU C |
Apollo AEGIS
Type | Macro |
---|---|
Identification | aegis |
Apollo Domain/OS
Type | Macro |
---|---|
Identification | apollo |
Bada
Based on Nucleus OS.BeOS
Type | Macro |
---|---|
Identification | __BEOS__ |
Blue Gene
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++ |
BSD Environment
Type | Macro | Format | Description |
---|---|---|---|
Identification | __FreeBSD__ __NetBSD__ __OpenBSD__ __bsdi__ __DragonFly__ | ||
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 |
BSD/OS
Type | Macro |
---|---|
Identification | __bsdi__ |
ConvexOS
Type | Macro |
---|---|
Identification | __convex__ |
Cygwin Environment
Type | Macro |
---|---|
Identification | __CYGWIN__ |
DG/UX
Type | Macro |
---|---|
Identification | DGUX |
Identification | __DGUX__ |
Identification | __dgux__ |
DragonFly
Type | Macro |
---|---|
Identification | __DragonFly__ |
DYNIX/ptx
Type | Macro |
---|---|
Identification | _SEQUENT_ |
Identification | sequent |
eCos
Type | Macro |
---|---|
Identification | __ECOS |
EMX Environment
Type | Macro |
---|---|
Identification | __EMX__ |
FreeBSD
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 <osreldate.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 |
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
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__ |
__FreeBSD_kernel__so the
__GLIBC__macro must be checked to distinguish it.
GNU/Linux
Type | Macro |
---|---|
Identification | __gnu_linux__ |
HI-UX MPP
Type | Macro |
---|---|
Identification | __hiuxmpp |
HP-UX
Type | Macro | Description |
---|---|---|
Identification | _hpux | Defined by HP UPC |
Identification | hpux | |
Identification | __hpux |
IBM OS/400
Type | Macro |
---|---|
Identification | __OS400__ |
INTEGRITY
Type | Macro |
---|---|
Identification | __INTEGRITY |
Interix Environment
Type | Macro | Description |
---|---|---|
Identification | __INTERIX | Defined by GNU C and Visual Studio |
IRIX
Type | Macro |
---|---|
Identification | sgi |
Identification | __sgi |
Linux kernel
Systems based on the Linux kernel define these macros. There are two major Linux-based operating systems: GNU/Linux andAndroid, and numerous others like Ångström or OpenEmbeddedType | Macro | Description |
---|---|---|
Identification | __linux__ | 1 |
Identification | linux | Obsolete (not POSIX compliant) |
Identification | __linux | Obsolete (not POSIX compliant) |
LynxOS
Type | Macro |
---|---|
Identification | __Lynx__ |
MacOS
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++ |
Microware OS-9
Type | Macro | Description |
---|---|---|
Identification | __OS9000 | Defined by Ultimate C/C++ |
Identification | _OSK | Defined by Ultimate C/C++ |
MINIX
Type | Macro |
---|---|
Identification | __minix |
MorphOS
Type | Macro |
---|---|
Identification | __MORPHOS__ |
MPE/iX
Type | Macro |
---|---|
Identification | mpeix |
Identification | __mpexl |
MSDOS
Type | Macro |
---|---|
Identification | MSDOS |
Identification | __MSDOS__ |
Identification | _MSDOS |
Identification | __DOS__ |
NetBSD
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 |
NonStop
Type | Macro |
---|---|
Identification | __TANDEM |
Nucleus RTOS
Type | Macro |
---|---|
Identification | __nucleus__ |
OpenBSD
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 |
OS/2
Type | Macro |
---|---|
Identification | OS2 |
Identification | _OS2 |
Identification | __OS2__ |
Identification | __TOS_OS2__ |
Palm OS
Type | Macro | Description |
---|---|---|
Identification | __palmos__ | Defined by GNU C in PRC-Tools |
Plan 9
Type | Macro |
---|---|
Identification | EPLAN9 |
Pyramid DC/OSx
Type | Macro |
---|---|
Identification | pyr |
QNX
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> |
QNX | _NTO_VERSION |
---|---|
6.2 | 620 |
Reliant UNIX
Type | Macro |
---|---|
Identification | sinux |
SCO OpenServer
Type | Macro | Description |
---|---|---|
Identification | M_I386 | Defined by GNU C |
Identification | M_XENIX | Defined by GNU C |
Identification | _SCO_DS |
Solaris
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 |
#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 |
Stratus VOS
Type | Macro | Format | Description |
---|---|---|---|
Identification | __VOS__ | ||
Version | __VOS__ | V | V = Version |
__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.
SVR4 Environment
Type | Macro | Description |
---|---|---|
Identification | __sysv__ | |
Identification | __SVR4 | |
Identification | __svr4__ | |
Identification | _SYSTYPE_SVR4 | Defined on IRIX |
Syllable
Type | Macro |
---|---|
Identification | __SYLLABLE__ |
Symbian OS
Type | Macro |
---|---|
Identification | __SYMBIAN32__ |
Tru64 (OSF/1)
Type | Macro |
---|---|
Identification | __osf__ |
Identification | __osf |
Ultrix
Type | Macro |
---|---|
Identification | ultrix |
Identification | __ultrix |
Identification | __ultrix__ |
Identification | unix& vax |
UNICOS
Type | Macro | Format | Description |
---|---|---|---|
Identification | _UNICOS | ||
Version | _UNICOS | V | V = Version |
UNICOS/mp
Type | Macro | Description |
---|---|---|
Identification | _CRAY __crayx1 |
UNIX Environment
Type | Macro |
---|---|
Identification | __unix__ |
Identification | __unix |
UnixWare
Type | Macro |
---|---|
Identification | sco |
Identification | _UNIXWARE7 |
U/Win Environment
Type | Macro |
---|---|
Identification | _UWIN |
VMS
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 |
VxWorks
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 |
Windows
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 by Watcom C/C++ |
Windows CE
Type | Macro | Format | Description |
---|---|---|---|
Identification | _WIN32_WCE | Defined by Embedded Visual Studio 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 |
Wind/U Environment
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 |
z/OS
Type | Macro | Description |
---|---|---|
Identification | __MVS__ | Host |
Identification | __HOS_MVS__ | Host |
Identification | __TOS_MVS__ | Target |
Related
references:http://stackoverflow.com/questions/5919996/how-to-detect-reliably-mac-os-x-ios-linux-windows-in-c-preprocessor http://gcc.gnu.org/onlinedocs/cpp/Predefined-Macros.html http://sourceforge.net/p/predef/wiki/OperatingSystems/
相关文章推荐
- 讲解C语言编程中指针赋值的入门实例
- MFC更改控件ID后,cpp文件显示错误“未定义的标识符”
- C语言中变量与其内存地址对应的入门知识简单讲解
- C++的动态库和静态库
- 【转】C++中delete和delete[]的区别
- C语言数组入门之数组的声明与二维数组的模拟
- C++ md5 小32位加密 (含源码下载)
- qt c++11 thread 执行错误
- C语言的数组学习入门之对数组初始化的操作
- 简单LRU算法实现的Cache(C++)
- C语言中sizeof()与strlen()函数的使用入门及对比
- C++11 JNI开发中RAII的应用(一)--制作基础工具
- C语言_数组与指针
- C语言_倒序输出
- C++连接mysql数据库
- C++终极复习篇(四)----封装继承多态
- C语言之转义字符
- c语言版——四则运算
- 【哈工大C语言作业实验题】:13-2作业
- C语言优化实例:为了消除嵌套switch-case聪明的做法