zoukankan      html  css  js  c++  java
  • C/C++跨平台的的预编译宏

    我们在编译一些跨平台的程序的时候难免会遇到_WIN32  __linux__什么之类的SDK或者编译器环境预定义的宏。有很多,之前还分不清_WIN32 和WIN32的区别。不过这里还好有个列表,做个备忘。

    Please send updates/corrections to predef-contribute.

    AIX

    TypeMacroDescription
    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 VersionMacro
    3.2.x _AIX3
    _AIX32
    4.1 _AIX41
    4.3 _AIX43

    Android

    TypeMacroFormatDescription
    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

    Amdahl UTS

    TypeMacro
    Identification UTS

    AmigaOS

    TypeMacroDescription
    Identification AMIGA  
    Identification __amigaos__ Defined by GNU C

    Apollo AEGIS

    TypeMacro
    Identification aegis

    Apollo Domain/OS

    TypeMacro
    Identification apollo

    Bada

    Based on Nucleus OS.

    BeOS

    TypeMacro
    Identification __BEOS__

    Blue Gene

    TypeMacroDescription
    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

    TypeMacroFormatDescription
    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
    VersionBSDMacro
    4.3 Net2 199103  
    4.4 199306 BSD4_4
    4.4BSD-Lite2 199506  

    BSD/OS

    TypeMacro
    Identification __bsdi__

    ConvexOS

    TypeMacro
    Identification __convex__

    Cygwin Environment

    TypeMacro
    Identification __CYGWIN__

    DG/UX

    TypeMacro
    Identification DGUX
    Identification __DGUX__
    Identification __dgux__

    DragonFly

    TypeMacro
    Identification __DragonFly__

    DYNIX/ptx

    TypeMacro
    Identification _SEQUENT_
    Identification sequent

    eCos

    TypeMacro
    Identification __ECOS

    EMX Environment

    TypeMacro
    Identification __EMX__

    FreeBSD

    TypeMacroFormatDescription
    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.

    TypeMacro
    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.

    TypeMacro
    Identification __FreeBSD_kernel__ && __GLIBC__

    Notice that FreeBSD also defines __FreeBSD_kernel__ so the __GLIBC__ macro must be checked to distinguish it.

    GNU/Linux

    TypeMacro
    Identification __gnu_linux__

    HI-UX MPP

    TypeMacro
    Identification __hiuxmpp

    HP-UX

    TypeMacroDescription
    Identification _hpux Defined by HP UPC
    Identification hpux  
    Identification __hpux  

    IBM OS/400

    TypeMacro
    Identification __OS400__

    INTEGRITY

    TypeMacro
    Identification __INTEGRITY

    Interix Environment

    TypeMacroDescription
    Identification __INTERIX Defined by GNU C and Visual Studio

    IRIX

    TypeMacro
    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

    TypeMacroDescription
    Identification __linux__ 1
    Identification linux Obsolete (not POSIX compliant)
    Identification __linux Obsolete (not POSIX compliant)

    LynxOS

    TypeMacro
    Identification __Lynx__

    MacOS

    TypeMacroDescription
    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

    TypeMacroDescription
    Identification __OS9000 Defined by Ultimate C/C++
    Identification _OSK Defined by Ultimate C/C++

    MINIX

    TypeMacro
    Identification __minix

    MorphOS

    TypeMacro
    Identification __MORPHOS__

    MPE/iX

    TypeMacro
    Identification mpeix
    Identification __mpexl

    MSDOS

    TypeMacro
    Identification MSDOS
    Identification __MSDOS__
    Identification _MSDOS
    Identification __DOS__

    NetBSD

    TypeMacroFormatDescription
    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  

    NonStop

    TypeMacro
    Identification __TANDEM

    Nucleus RTOS

    TypeMacro
    Identification __nucleus__

    OpenBSD

    TypeMacroFormatDescription
    Identification __OpenBSD__    
    Version BSD    
    Version OpenBSD'V'_'R'   V = Version
    R = Revision

    Must be included from <sys/param.h>
    Example
    OpenBSDMacro
    3.1 OpenBSD3_1
    3.9 OpenBSD3_9

    OS/2

    TypeMacro
    Identification OS2
    Identification _OS2
    Identification __OS2__
    Identification __TOS_OS2__

    Palm OS

    TypeMacroDescription
    Identification __palmos__ Defined by GNU C in PRC-Tools

    Plan 9

    TypeMacro
    Identification EPLAN9

    Pyramid DC/OSx

    TypeMacro
    Identification pyr

    QNX

    TypeMacroFormatDescription
    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
    QNX_NTO_VERSION
    6.2 620

    Reliant UNIX

    TypeMacro
    Identification sinux

    SCO OpenServer

    TypeMacroDescription
    Identification M_I386 Defined by GNU C
    Identification M_XENIX Defined by GNU C
    Identification _SCO_DS  

    Solaris

    TypeMacroDescription
    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
    SolarisMacro
    2.7 __SunOS_5_7
    8 __SunOS_5_8

    Stratus VOS

    TypeMacroFormatDescription
    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

    TypeMacroDescription
    Identification __sysv__  
    Identification __SVR4  
    Identification __svr4__  
    Identification _SYSTYPE_SVR4 Defined on IRIX

    Syllable

    TypeMacro
    Identification __SYLLABLE__

    Symbian OS

    TypeMacro
    Identification __SYMBIAN32__

    Tru64 (OSF/1)

    TypeMacro
    Identification __osf__
    Identification __osf

    Ultrix

    TypeMacro
    Identification ultrix
    Identification __ultrix
    Identification __ultrix__
    Identification unix & vax

    UNICOS

    TypeMacroFormatDescription
    Identification _UNICOS    
    Version _UNICOS V V = Version

    UNICOS/mp

    TypeMacroDescription
    Identification _CRAY
    __crayx1
     

    UNIX Environment

    TypeMacro
    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

    TypeMacro
    Identification sco
    Identification _UNIXWARE7

    U/Win Environment

    TypeMacro
    Identification _UWIN

    VMS

    TypeMacroFormatDescription
    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

    TypeMacroDescription 
    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

    Windows

    TypeMacroDescription
    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

    TypeMacroFormatDescription
    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
    PlatformMacroValue
    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

    TypeMacroFormatDescription
    Identification _WINDU_SOURCE    
    Version _WINDU_SOURCE 0xVVRRPP VV = Version
    RR = Revision
    PP = Patch
    Example
    Wind/U_WINDU_SOURCE
    3.1.2 0x030102

    z/OS

    TypeMacroDescription
    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语言-if语句
    C语言-表达式
    C语言-基础
    Java for LeetCode 187 Repeated DNA Sequences
    Java for LeetCode 179 Largest Number
    Java for LeetCode 174 Dungeon Game
    Java for LeetCode 173 Binary Search Tree Iterator
    Java for LeetCode 172 Factorial Trailing Zeroes
    Java for LeetCode 171 Excel Sheet Column Number
    Java for LeetCode 169 Majority Element
  • 原文地址:https://www.cnblogs.com/foohack/p/5013272.html
Copyright © 2011-2022 走看看