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

编译器

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

原文地址:https://www.cnblogs.com/xi52qian/p/2213408.html