C/C++跨平台的的预编译宏
我们在编译一些跨平台的程序的时候难免会遇到_WIN32 __linux__什么之类的SDK或者编译器环境预定义的宏。有很多,之前还分不清_WIN32 和WIN32的区别。不过这里还好有个列表,做个备忘。
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 |
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 |
Android
Type | Macro | Format | Description |
---|---|---|---|
Identification | __ANDROID__ |
||
Version | __ANDROID_API__ |
V | V = API Version
Must be included from |
Notice that Android is based on Linux, 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 |
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 |
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 |
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> |
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.
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__ |
Notice that FreeBSD also defines __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 OpenEmbedded
Type | 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 |
|
Version | __NetBSD_Version__ |
VVRRAAPP00 | VV = Version RR = Revision AA = Release PP = Patch From NetBSD 1.2D (?) until NetBSD 2.0H Must be included from |
Version | __NetBSD_Version__ |
VVRR00PP00 | VV = Version RR = Revision PP = Patch From NetBSD 2.99.9 Must be included from |
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 |
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 |
Example
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 Must be included from |
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 |
Example
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 |
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 |
Stratus VOS
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.
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 |
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.
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) |
Example
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 | _WRS_VXWORKS_MINOR |
Revision
Must be included from |
|
Version | _WRS_VXWORKS_MAINT |
Patch/maintenance
Must be included from |
|
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 |
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 |
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 |
Wind/U Environment
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 |
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/C++跨平台的的预编译宏的更多相关文章
- linux, windows, mac, ios等平台GCC预编译宏判断
写跨平台c/c++程序的时候,需要搞清各平台下面的预编译宏,区分各平台代码.而跨平台c/c++编程,GCC基本在各平台都可以使用.整理了一份各平台预编译宏的判断示例. 需要注意几点: * window ...
- GCC预编译宏查看
编译调试代码时,总是遇到要使用编译器预编译宏进行跨平台编译. gcc -E -dM -</dev/null 编译器版本 Thread model: posix gcc version 5.4.0 ...
- C中的预编译宏定义
可以用宏判断是否为ARC环境 #if _has_feature(objc_arc) #else //MRC #endif C中的预编译宏定义 -- 作者: infobillows 来源:网络 在将一 ...
- C++头文件中预编译宏的目的
C++头文件中预编译宏的目的 eg: #ifndef _FACTORY_H_#define _FACTORY_H_......#endif //~_FACTORY_H_ 防止头文件被重复包含,导致变量 ...
- xcode 配置系统环境变量 Preporocessing 预编译宏的另一种写法, 系统的DEBUG 由来
在某些项目中看到一些环境变量类似宏的东西 比如叫ENVIRONMENT, 但发现还找不到具体这个宏是什么值, 那是因为他实在Preprocessing里配置了这个宏的值, 他能配置debug/rele ...
- Unity3D 多平台 预编译 宏定义
平台定义 UNITY_EDITOR 编辑器调用. UNITY_STANDALONE_OSX 专门为Mac OS(包括Universal,PPC和Intelarchitectures)平台的定义. UN ...
- C预编译宏
/* ============================================================================ Name : c_test001.c A ...
- C 预编译 宏 声明
- Visual Studio 2013 配置多个Release版本,并为每个版本配置预编译的宏
最近开发过程中,需要将同一份工程编译成两个版本,分别为ReleaseA和ReleaseB. ReleaseB比ReleaseA少了部分功能,所以希望在编译的时候,根据不同的版本编译工程中相应的代码. ...
随机推荐
- windows 编程 之 问题解决笔记
问题目录: 1.如何隐藏和显示窗口 2.InvalidateRect在连续使用鼠标或光标时暂时不起作用 3.在VC项目里自己添加头文件和cpp文件在编译阶段报错 4.在static 控件里添加子控件或 ...
- CodeForces 146E - Lucky Subsequence DP+扩展欧几里德求逆元
题意: 一个数只含有4,7就是lucky数...现在有一串长度为n的数...问这列数有多少个长度为k子串..这些子串不含两个相同的lucky数... 子串的定义..是从这列数中选出的数..只要序号不同 ...
- 【Hibernate步步为营】--继承映射具体解释
上篇文章讨论了多对多映射,在使用多对多映射时重点是使用<many-to-many>标签,并在标签的两端加入外键这样在生成关系时会创建两个关系之间的关系表,通过关系表来维护它们之间的关系,另 ...
- [Falcor] Retrieving Multiple Values
In addition to being able to retrieve a path from a Falcor Model, you can also retrieve multiple Pat ...
- uploadify上传大文件时出现404错误
出现这个错误的话一般是IIs限制了文件大小.IIS7下的默认设置限制了上传大小.这个时候Web.Config中的大小设置也就失效了.具体步骤:1.打开IIS管理器,找到Default Web Site ...
- svn不提交user文件
http://godera.blog.163.com/blog/static/215023060201312011112966/
- python的运算符
#coding=utf-8#"+"两个对象相加#两个数字相加a=7+8print a #两个字符串相加b="GOOD"+"JOB"print ...
- JavaScript网页制作特效
一.什么是JavaScript? 网页交互特效的脚本语言. 特效 二.BOM对象 能够使得JavaScript和浏览器进行对话. 主要是使用Window对象进行操作. History对象:历史,可以实 ...
- java的final变量理解
java的final变量理解 final基本类型是数值不能改变 final对象是引用不能改变,对象其自身是可以被修改的.
- Java直接插入算法
直接插入算法是将N个带排序的元素看做成一个有序表和一个无序表. 每次从无序表中取一个元素和有序表比较,重复N-1次完成排序. 直接上代码: package test; public class Tes ...