编译器,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
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
相关文章推荐
- Cosmos的基石:IL2CPU编译器--C#开源操作系统学习系列三
- 操作系统,CPU,编译器,运行时库,系统调用的关系 之 编译器篇
- CPU位数、操作系统位数和编译器位数关系
- 32位与64位 CPU、编译器、操作系统、应用程序、arm和X86关系
- CPU位数、操作系统位数和编译器位数关系
- CPU位数、操作系统位数和编译器位数关系
- CPU位数、操作系统位数和编译器位数关系
- 32位与64位 CPU、编译器、操作系统与应用程序的区别
- CPU位数、操作系统位数和编译器位数关系
- 编译器,CPU和操作系统的宏
- Cosmos的基石:IL2CPU编译器--C#开源操作系统学习系列三(转)
- 编译器、操作系统、CPU相关的预处理宏定义
- 软件如何控制硬件、编译器和操作系统是否需要编译
- 查看CentOS的CPU内存信息及操作系统的版本信息
- 操作系统 — 了解CPU cache
- jvm原理、启动时间、与编译器&操作系统关系
- 读书笔记:操作系统概念 - Chapter4-6 - Threads,CPU Scheduling
- IA-32体系结构CPU保护模式和32位操作系统常见误区
- 查看linux的内存、Cpu、操作系统版本、位数。
- 关于 Intel CPU 支持虚拟机 64位操作系统 vm