有时候编译需要多平台运行的代码,需要一些条件编译,经常忘记,这里专门记录一下,方便下次查找。
 
  • 编译器
GCC
  1. #ifdef __GNUC__
  2. #if __GNUC__ >= 3 // GCC3.0以上
 
Visual C++
  1. #ifdef _MSC_VER
  2. #if _MSC_VER >=1000 // VC++4.0以上
  3. #if _MSC_VER >=1100 // VC++5.0以上
  4. #if _MSC_VER >=1200 // VC++6.0以上
  5. #if _MSC_VER >=1300 // VC2003以上
  6. #if _MSC_VER >=1400 // VC2005以上
 
Borland C++
  1. #ifdef __BORLANDC__
 
Cygwin
  1. #ifdef __CYGWIN__
  2. #ifdef __CYGWIN32__    //
 
 
MinGW
  1. #ifdef __MINGW32__
 
  • 操作系统
Windows
  1. #ifdef _WIN32    //32bit
  2. #ifdef _WIN64    //64bit
  3. #ifdef _WINDOWS     //图形界面程序
  4. #ifdef _CONSOLE     //控制台程序
  5. //Windows(95/98/Me/NT/2000/XP/Vista)和Windows CE都定义了
  6. #if (WINVER >= 0x030a)     // Windows 3.1以上
  7. #if (WINVER >= 0x0400)     // Windows 95/NT4.0以上
  8. #if (WINVER >= 0x0410)     // Windows 98以上
  9. #if (WINVER >= 0x0500)     // Windows Me/2000以上
  10. #if (WINVER >= 0x0501)     // Windows XP以上
  11. #if (WINVER >= 0x0600)     // Windows Vista以上
  12. //_WIN32_WINNT 内核版本
  13. #if (_WIN32_WINNT >= 0x0500) // Windows 2000以上
  14. #if (_WIN32_WINNT >= 0x0501) // Windows XP以上
  15. #if (_WIN32_WINNT >= 0x0600) // Windows Vista以上
 
UNIX
  1. #ifdef __unix
  2. //or
  3. #ifdef __unix__
 
Linux
  1. #ifdef __linux
  2. //or
  3. #ifdef __linux__
 
FreeBSD
  1. #ifdef __FreeBSD__
 
NetBSD
  1. #ifdef __NetBSD__
 
  • Qt特有

<qtglobal.h>定义了Q_OS_*和Q_WS_*系列用于判断操作系统。Q_CC_*系列判断编译器。

具体的可以在Qt Assistant里索引qtglobal.h查看。
 

<编译>条件编译——判断当前使用的编译器及操作系统的更多相关文章

  1. ”危险“的RESTRICT与GCC的编译优化(编程者对编译器所做的一个“承诺”:使用restrict修饰过的指针,它所指向的内容只能经由该指针修改)

    restrict是C99标准中新添加的关键字,对于从C89标准开始起步学习C语言的同学来说(包括我),第一次看到restrict还是相当陌生的.Wikipedia给出的解释如下: In the C p ...

  2. Flex编译探索:FLEXSDK自带编译器与MAVEN插件Flex-mojos

    最近为了持续集成,想将flex的编译形成自动化.所以做了一些探索,虽然最后放弃了,但也有一些认识,写出来可以少走一些弯路. Flex的编译都是基于mxmlc编译机制 flex-mojos也是基于mxm ...

  3. fatal error C1859 意外的预编译头错误,只需重新运行编译器(转)

    微软的建议 要解决此问题,请使用下列方法之一. http://support.microsoft.com/kb/976656/zh-cn 方法 1 禁用/analyze编译器选项,则它会被启用. 方法 ...

  4. linux, windows, mac, ios等平台GCC预编译宏判断

    写跨平台c/c++程序的时候,需要搞清各平台下面的预编译宏,区分各平台代码.而跨平台c/c++编程,GCC基本在各平台都可以使用.整理了一份各平台预编译宏的判断示例. 需要注意几点: * window ...

  5. C++编译期判断是否能够转型

    #include <iostream> #include <vector> using namespace std; template<class T,class U&g ...

  6. 实现把C语言编译成java字节码的编译器 一个将C语言编译成java字节码的实例

  7. 安装了vs2019 编译node-sass node-gyp 找不到编译器的解决方法

    1 新建powershell脚本文件 <# This is a workaround for "node-gyp is unable to find msbuild if VS2019 ...

  8. warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]

    在C++中, char* p = "abc"; // valid in C, invalid in C++ 会跳出警告:warning: ISO C++ forbids conve ...

  9. C++编译期间字节序判断

    当前常用的字节序一般就两种,大端序和小端序. 下面列出四种字节序的表达方式.在对应平台下,内存布局为{0x,00,0x01,0x02,0x03}的四字节,表示为十六进制的值就如下面代码所示的. END ...

随机推荐

  1. HDU3572Task Schedule(最大流 ISAP比較快)建图方法不错

    Task Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  2. Java第三次实验要求

    实验三 类与对象(一) 一. 实验目的 1. 掌握类与对象的基本概念: 2. 掌握类的声明.创建与用法: 3. 掌握类的构造方法的定义与用法 4. 掌握类的成员变量.成员方法的定义与用法: 5. 理解 ...

  3. CSS规则的优先级匹配

    CSS规则之间能够互相覆盖.这一点我们应该已经习以为常了.然而正是因为规则之间能够互相覆盖.子元素继承父元素的默认行为,导致了CSS冲突的问题. 碰到CSS冲突时.通常我们会增加一些更加具体的规则来明 ...

  4. iOS_隐藏顶部状态栏

    iOS6和iOS7在隐藏 Status Bar 三种方式比較: Storyboard 界面上选中UIViewController,最右边Simulated Metrics找到 Status Bar 设 ...

  5. 2.nginx整合PHP

    /usr/local/src/下都有什么:.tar.gz文件和解压之后的源码 /usr/local/下都有什么:源码编译之后的东西 安装mysql客户端 安装mysql服务端 启动mysql服务端 s ...

  6. python(27)- 面向对象练习Ⅰ

    一:定义如下类,并最大程度地重用代码(继承,派生:子类重用父类方法,组合) 老师类 学生类 分数类 课程类 生日类 class People: def __init__(self,name,age,b ...

  7. 你所不知道的库存超限做法 服务器一般达到多少qps比较好[转] JAVA格物致知基础篇:你所不知道的返回码 深入了解EntityFramework Core 2.1延迟加载(Lazy Loading) EntityFramework 6.x和EntityFramework Core关系映射中导航属性必须是public? 藏在正则表达式里的陷阱 两道面试题,带你解析Java类加载机制

    你所不知道的库存超限做法 在互联网企业中,限购的做法,多种多样,有的别出心裁,有的因循守旧,但是种种做法皆想达到的目的,无外乎几种,商品卖的完,系统抗的住,库存不超限.虽然短短数语,却有着说不完,道不 ...

  8. Qt5的插件机制(6)--开发Qt插件时几个重要的宏

    怎样开发Qt插件,能够在Qt Assistant 中搜索"Qt Plugins"或"How to Create Qt Plugins",看看那篇manual中的 ...

  9. 【Sprint3冲刺之前】敏捷团队绩效考核(刘铸辉)

     TD学生助手团队已经在4.22~4.30完成了为期9天的Sprint2计划,并在Sprint2总结会议中安排了五一放假每个人的任务分配,下面发布下Sprint2冲刺周期的阶段性成果. Sprint2 ...

  10. fping - send ICMP ECHO_REQUEST packets to network hosts

    NAME fping - send ICMP ECHO_REQUEST packets to network hosts SYNOPSIS fping [ options ] [ systems... ...