您的位置:首页 > 其它

编译器,CPU和操作系统的宏

2011-10-15 16:12 525 查看
编译器

GCC
#ifdef __GNUC__

#if __GNUC__ >= 3 // GCC3.0以上

Visual C++
#ifdef _MSC_VER(非VC编译器很多地方也有定义)

#if _MSC_VER >=1000 // VC++4.0以上

#if _MSC_VER >=1100 // VC++5.0以上

#if _MSC_VER >=1200 // VC++6.0以上

#if _MSC_VER >=1300 // VC2003以上

#if _MSC_VER >=1400 // VC2005以上

Borland C++

#ifdef __BORLANDC__

UNIX

UNIX
#ifdef __unix
or
#ifdef __unix__

Linux
#ifdef __linux
or
#ifdef __linux__

FreeBSD
#ifdef __FreeBSD__

NetBSD
#ifdef __NetBSD__

Windows

32bit
#ifdef _WIN32(或者WIN32)

64bit
#ifdef _WIN64

GUI App
#ifdef _WINDOWS

CUI App
#ifdef _CONSOLE

Windows的Ver … WINVER
PC机Windows(95/98/Me/NT/2000/XP/Vista)和Windows CE都定义了

#if (WINVER >= 0x030a) // Windows 3.1以上

#if (WINVER >= 0x0400) // Windows 95/NT 4.0以上

#if (WINVER >= 0x0410) // Windows 98以上

#if (WINVER >= 0x0500) // Windows Me/2000以上

#if (WINVER >= 0x0501) // Windows XP以上

#if (WINVER >= 0x0600) // Windows Vista以上

Windows 95/98/Me的Ver … _WIN32_WINDOWS

MFC App、PC机上(Windows CE没有定义)
#ifdef _WIN32_WINDOWS

#if (_WIN32_WINDOWS >= 0x0400) // Windows 95以上

#if (_WIN32_WINDOWS >= 0x0410) // Windows 98以上

#if (_WIN32_WINDOWS >= 0x0500) // Windows Me以上

Windows NT 的Ver … _WIN32_WINNT

#if (_WIN32_WINNT >= 0x0500) // Windows 2000以上

#if (_WIN32_WINNT >= 0x0501) // Windows XP以上

#if (_WIN32_WINNT >= 0x0600) // Windows Vista以上

Windows CE(PocketPC
#ifdef _WIN32_WCE

Windows CE … WINCEOSVER

Windows CE
WCE_IF

Int ernet Explorer的Ver … _WIN32_IE

Cygwin


Cygwin

#ifdef __CYGWIN__

32bit版Cygwin(现在好像还没有64bit版)
#ifdef __CYGWIN32__

MinGW(-mno-cygwin指定)
#ifdef __MINGW32__

相信很多人都有这么一个经历,想宏定义某一个值,而这个值随着编译器选择的CPU不同而有所不同,但却苦于文档中没有关于CPU宏的说明.所以很多朋友的做法往往做法是自定以多个宏用来区分CPU的类型.其实大可不必,编译器在CPU不同时确实定义了相应的宏,只不过这个在文档中没有说明而已.
CPU Type Macro
x86 _X86_
mips _MIPS_
arm _ARM_
sh3 _SH3_
根据不同的CPU定义不同的宏数值,代码可如此书写:
#ifdef _X86_
#define REG_NUM 8
#endif
#ifdef _MIPS_
#define REG_NUM 12
#endif
其实最为实用的,还是根据不同的CPU类型选择不同的lib库链接,例如:
#ifdef _X86_
#pragma comment (lib,".//lib//X86em//Strmiids.lib")
#endif
#ifdef _MIPS_
#pragma comment (lib,".//lib//MIPSII//Strmiids.lib")
#endif
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: