• 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/

  • 相关阅读:
    Linux命令之du命令
    6562. 【GDOI2020模拟4.15】楼房搭建(building)
    CF660E. Different Subsets For All Tuples
    6555. 【GDOI2020模拟4.11】黑红兔(brr)(SAM小技♂巧)
    6554. 【GDOI2020模拟4.11】赢家(winner)
    6553. 【GDOI2020模拟4.11】人生(life)
    6546. 【GDOI2020模拟4.8】USACO 2020 Open Contest, Platinum(circus)
    6545. 【GDOI2020模拟4.8】USACO 2020 Open Contest, Platinum(exercise)
    6544. 【USACO 2020 US Open Platinum】 Sprinklers 2: Return of the Alfalfa
    6543. 【GDOI2020模拟4.4】Easy Data Structure(动态dp)
  • 原文地址:https://www.cnblogs.com/foohack/p/5013272.html
Copyright © 2020-2023  润新知