跨平台常用的宏
#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://*.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