用宏区分操作系统和编译器

编译器
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/NT4.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
Internet Explorer的Ver … _WIN32_IE
Cygwin
Cygwin

ifdef CYGWIN

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

ifdef CYGWIN32

MinGW(-mno-cygwin指定)

ifdef MINGW32

原文地址:http://blog.csdn.net/immcss/article/details/3881827

时间: 2024-11-05 22:44:02

用宏区分操作系统和编译器的相关文章

区分不同操作系统、编译器不同版本的宏

[1]不同操作系统的宏 可以参考QtCore/qsystemdetection.h文件: 1 /**************************************************************************** 2 ** 3 ** Copyright (C) 2016 The Qt Company Ltd. 4 ** Contact: https://www.qt.io/licensing/ 5 ** 6 ** This file is part of th

springboot 头像上传 文件流保存 文件流返回浏览器查看 区分操作系统 windows 7 or linux

1 //我的会员中心 头像上传接口 2 /*windows 调试*/ 3 @Value("${appImg.location}") 4 private String winPathPic; 5 /*linux 使用*/ 6 @Value("${img.location}") 7 private String linuxPathPic; 8 9 @PostMapping(value = "/file") 10 public String file(

使用TARGET_IPHONE_SIMULATOR和TARGET_OS_IPHONE宏区分模拟器和设备

#if TARGET_IPHONE_SIMULATOR          NSLog(@"run on simulator");      #else          NSLog(@"run on device");      #endif 注意不要用#ifdef TARGET_IPHONE_SIMULATOR, 因为在device上, TARGET_IPHONE_SIMULATOR被定义为0.. TARGET_OS_IPHONE的用法也一样.

Qt宏判断操作系统

1 #ifdef Q_OS_WIN const char * const eol = "\r\n"; #else const char *eol = "\n"; #endif

VC中常用的宏[转]

我们在VS环境中开发的时候,会遇到很多宏定义,这些宏可以应用到代码中,或用于编译.工程选项等设置,总之是我们开发中必不可少的工具,有必要做一个总结.有些宏是C/C++定义的,有些宏是VC环境预定义的. 1.C/C++中的宏 __cplusplus  如果当前编译器为C++,该值为1. __DATE__  当前源码的编译日期,格式为Mmm dd yyyy. __TIME__  当前源码的编译时间,格式为hh:mm:ss. __TIMESTAMP__  当前源码文件最后被修改的日期和时间,格式为Dd

操作系统学习笔记系列(一)- 导论

1.操作系统最重要的一点是要有多道程序处理能力.多道程序设计通过组织作业使得CPU总有一个作业可以执行,从而提高了CPU的利用率. 2.分时系统是多道程序设计的延伸.在分时系统中,虽然CPU还是通过在作业之间的切换来执行多个作业,但是由于切换频率很高,所以用户可以在程序运行期间与之进行交互. 分时系统允许许多用户同时共享计算机.由于分时系统的每个动作或者命令都较为短暂,所以每个用户只要少量的CPU时间.随着系统由一个用户快速切换到另一个用户,每个用户会感到整个系统只为自己所用. 3.装入到内存中

使用xmake检测编译器特性支持

如果我们要写跨平台的c/c++代码,很多时候需要处理由于不同编译器对c/c++各个标准支持力度不同导致的兼容性问题,一般通常的解决办法是:自己在代码中通过宏去判断各个编译器的版本.内置宏.标准库宏.__has_feature等来检测处理. 自己如果在代码中按上述的方式检测,会很繁琐,尤其是像c++这种存在大量语法特性,如果一一检测过来,工作量是非常大的. 通过构建工具预先检测编译特性 另外比较省事的方式,就是依赖构建工具提前做好检测,然后把检测结果作为宏添加到编译中去,这样代码只需要判断对应的特

C编译器剖析_C语言的变参函数

C语言的变参函数 UCC编译器中有不少地方使用了C语言的变参函数,这里我们专门用一小节来对C语言变参函数的实现原理进行分析.C标准库中的printf函数就是一个典型的变参函数,其接口如下所示,函数声明中的省略号-表明这是一个变参函数. int printf(const char *format, ...); 下面我们举一个简单的例子来说明printf函数的调用过程,如图4.2.12所示.图中第1至11行对应是hello.c,而第12至25行是由UCC编译器生成的抽象语法树hello.ast,第2

Linux环境下GNU, GCC, G++编译器

一,GNU GNU是"GNU 's Not Unix"的递归缩写, Stallman宣布GNU应当发音为Guh-NOO(革奴)以避免与new这个单词混淆(注:Gnu在英文中原意为非洲牛羚,发音与new相同) 为保证GNU软件可以自由地"使用.复制.修改和发布",所有GNU软件都在一份在禁止其他人添加任何限制的情况下授权所有权利给任何人的协议条款,GNU通用公共许可证(GNU General Public License,GPL).这个就是被称为"反版权&q