跨平台程序,经常要用到区分系统的宏定义,比如windows中的WIN32, WIN64, Linux中的 unix, linux等等系统自定义宏
那么在linux下面,怎么查看系统有哪些自定义宏咧,用如下方法:
$ touch dummy.hxx
$ cpp -dM ./dummy.hxx
输出如下:
[xhq@syfh1-10-0-128-229 server]$ cpp -dM ./dummy.hxx
#define __DBL_MIN_EXP__ (-1021)
#define __FLT_MIN__ 1.17549435e-38F
#define __CHAR_BIT__ 8
#define __WCHAR_MAX__ 2147483647
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1
#define __DBL_DENORM_MIN__ 4.9406564584124654e-324
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1
#define __FLT_EVAL_METHOD__ 0
#define __unix__ 1
#define __x86_64 1
#define __DBL_MIN_10_EXP__ (-307)
#define __FINITE_MATH_ONLY__ 0
#define __GNUC_PATCHLEVEL__ 7
#define __DEC64_MAX_EXP__ 385
#define __SHRT_MAX__ 32767
#define __LDBL_MAX__ 1.18973149535723176502e+4932L
#define __UINTMAX_TYPE__ long unsigned int
#define __linux 1
#define __DEC32_EPSILON__ 1E-6DF
#define __unix 1
#define __LDBL_MAX_EXP__ 16384
#define __linux__ 1
要查看全部,可以加less命令:
$ cpp -dM ./dummy.hxx | less
就可以光标向上翻或者向下翻,因为系统可能宏定义比较多,一屏看不过来
以上原文地址:http://blog.csdn.net/xiaoheqin/article/details/52183073
另附上各操作系统的平台宏定义
| 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/Linuxand Android, 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 |
所有评论(0)