跨平台常用的宏
#ifdef _WIN32
//define something for Windows (32-bit and 64-bit, this part is common)
#ifdef _WIN64
//define something for Windows (64-bit only)
#endif
#elif __APPLE__
#include "TargetConditionals.h"
#if TARGET_IPHONE_SIMULATOR
// iOS Simulator
#elif TARGET_OS_IPHONE
// iOS device
#elif TARGET_OS_MAC
// Other kinds of Mac OS
#else
# error "Unknown Apple platform"
#endif
#elif __linux__
// linux
#elif __unix__ // all unices not caught above
// Unix
#elif defined(_POSIX_VERSION)
// POSIX
#else
# error "Unknown compiler"
#endif
我们在编译一些跨平台的程序的时候难免会遇到_WIN32 __linux__什么之类的SDK或者编译器环境预定义的宏。有很多,之前还分不清_WIN32 和WIN32的区别。不过这里还好有个列表,做个备忘。
Please send updates/corrections to predef-contribute .
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 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
Type Macro Identification UTS
Type Macro Description Identification AMIGA
Identification __amigaos__
Defined by GNU C
Type Macro Identification aegis
Type Macro Identification apollo
Based on Nucleus OS.
Type Macro Identification __BEOS__
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__
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 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 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 <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 .
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 Identification __hiuxmpp
Type Macro Description Identification _hpux
Defined by HP UPC Identification hpux
Identification __hpux
Type Macro Identification __OS400__
Type Macro Identification __INTEGRITY
Type Macro Description Identification __INTERIX
Defined by GNU C and Visual Studio
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 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)
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 Identification __minix
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 __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 __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
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 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 by Watcom C/C++
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
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
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/
转自:http://www.cnblogs.com/foohack/p/5013272.html
标签: __ ,Description ,Macro ,编译器 ,跨平台 ,Version ,Identification ,预定 ,Type
来源: https://blog.csdn.net/weixin_45983363/article/details/111357520