判断编译器类型、编译器版本、操作系统。

Keil C系列之编译器介绍(1) C编程语言是一种通用编程语言,它提供了代码效率、结构化编程元素和丰富的操作符集。C语言不是一门很大的语言,也不是为任何特定的应用领域而设计的。C语言的通用性和它的无限制相结合,使得C语言方便而有效地解决了各种各样的软件任务。与其他更专业的语言相比,使用c语言可以更容易、更有效地解决许多应用程序。Cx51优化C编译器是C语言美国国家标准协会(nSI)标准的完整实现。Cx51编译器不是一个适用于os目标的通用C编译器。它是一个基础实现,致力于为8051微处理器生成极其快速和紧凑的代码。 阅读详情

目录

1. 判断编译器类型:

2. 判断编译器版本:

3. 判断操作系统:

总结:




1. 判断编译器类型:

可以使用预定义的宏来判断编译器类型。例如,__GNUC__ 宏用于判断是否使用了GCC 编译器,_MSC_VER 宏用于判断是否使用了MSVC 编译器。

#ifdef __GNUC__
    // 使用了GCC编译器
    // 可以在这里添加相应的代码
#elif defined(_MSC_VER)
    // 使用了MSVC编译器
    // 可以在这里添加相应的代码
#else
    // 其他编译器
    // 可以在这里添加相应的代码
#endif

2. 判断编译器版本:

要判断编译器的版本,可以使用预定义的宏或条件编译指令,具体取决于使用的编译器。以下是示例代码,用于判断GCC和MSVC编译器的版本:

#ifdef __GNUC__
    // 使用了GCC编译器
    #if __GNUC__ >= 7
        // GCC版本大于等于7
    #else
        // GCC版本小于7
    #endif
#elif defined(_MSC_VER)
    // 使用了MSVC编译器
    #if _MSC_VER >= 1920
        // MSVC版本大于等于2019(版本号1920对应于MSVC 2019)
    #else
        // MSVC版本小于2019
    #endif
#else
    // 其他编译器
#endif

3. 判断操作系统:

要判断操作系统,可以使用预定义的宏,如 __linux__、_WIN32、_WIN64 等。以下是示例代码,用于判断操作系统类型:
 

#ifdef __linux__
    // Linux操作系统
#elif defined(_WIN32) || defined(_WIN64)
    // Windows操作系统
#else
    // 其他操作系统
#endif

总结:

//GCC编译器
#ifdef __GNUC__
#if __GNUC__ >= 3   // GCC3.0  以上

//MSVC编译器
#ifdef _MSC_VER
#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  以上
#if _MSC_VER >=1500 // VC2008  以上
#if _MSC_VER >=1600 // VC2010  以上
#if _MSC_VER >=1700 // VC2012  以上
#if _MSC_VER >=1800 // VC2013  以上
#if _MSC_VER >=1900 // VC2015  以上

//Visual Studio版本与MSVC版本号的对应关系
MSC    1.0   _MSC_VER == 100
MSC    2.0   _MSC_VER == 200
MSC    3.0   _MSC_VER == 300
MSC    4.0   _MSC_VER == 400
MSC    5.0   _MSC_VER == 500
MSC    6.0   _MSC_VER == 600
MSC    7.0   _MSC_VER == 700
MSVC++ 1.0   _MSC_VER == 800
MSVC++ 2.0   _MSC_VER == 900
MSVC++ 4.0   _MSC_VER == 1000 (Developer Studio 4.0)
MSVC++ 4.2   _MSC_VER == 1020 (Developer Studio 4.2)
MSVC++ 5.0   _MSC_VER == 1100 (Visual Studio 97 version 5.0)
MSVC++ 6.0   _MSC_VER == 1200 (Visual Studio 6.0 version 6.0)
MSVC++ 7.0   _MSC_VER == 1300 (Visual Studio .NET 2002 version 7.0)
MSVC++ 7.1   _MSC_VER == 1310 (Visual Studio .NET 2003 version 7.1)
MSVC++ 8.0   _MSC_VER == 1400 (Visual Studio 2005 version 8.0)
MSVC++ 9.0   _MSC_VER == 1500 (Visual Studio 2008 version 9.0)
MSVC++ 10.0  _MSC_VER == 1600 (Visual Studio 2010 version 10.0)
MSVC++ 11.0  _MSC_VER == 1700 (Visual Studio 2012 version 11.0)
MSVC++ 12.0  _MSC_VER == 1800 (Visual Studio 2013 version 12.0)
MSVC++ 14.0  _MSC_VER == 1900 (Visual Studio 2015 version 14.0)
MSVC++ 14.1  _MSC_VER == 1910 (Visual Studio 2017 version 15.0)
MSVC++ 14.11 _MSC_VER == 1911 (Visual Studio 2017 version 15.3)
MSVC++ 14.12 _MSC_VER == 1912 (Visual Studio 2017 version 15.5)
MSVC++ 14.13 _MSC_VER == 1913 (Visual Studio 2017 version 15.6)
MSVC++ 14.14 _MSC_VER == 1914 (Visual Studio 2017 version 15.7)
MSVC++ 14.15 _MSC_VER == 1915 (Visual Studio 2017 version 15.8)
MSVC++ 14.16 _MSC_VER == 1916 (Visual Studio 2017 version 15.9)
MSVC++ 14.2  _MSC_VER == 1920 (Visual Studio 2019 Version 16.0)
MSVC++ 14.21 _MSC_VER == 1921 (Visual Studio 2019 Version 16.1)
MSVC++ 14.22 _MSC_VER == 1922 (Visual Studio 2019 Version 16.2)
MSVC++ 14.30 _MSC_VER == 1930 (Visual Studio 2022 Version 17.0)
MSVC++ 14.31 _MSC_VER == 1931 (Visual Studio 2022 Version 17.1)
MSVC++ 14.32 _MSC_VER == 1932 (Visual Studio 2022 Version 17.2)

//Borland C++
#ifdef __BORLANDC__

//Cygwin
#ifdef __CYGWIN__
#ifdef __CYGWIN32__

//mingw
#ifdef __MINGW32__

//windows
#ifdef _WIN32           //32bit
#ifdef _WIN64           //64bit
#ifdef _WINDOWS         //图形界面程序
#ifdef _CONSOLE         //控制台程序

//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以上

//_WIN32_WINNT 内核版本
#if (_WIN32_WINNT >= 0x0500) // Windows 2000以上
#if (_WIN32_WINNT >= 0x0501) // Windows XP以上
#if (_WIN32_WINNT >= 0x0600) // Windows Vista以上

CMake 判断操作系统类型 cmake使用 if(win32) 判断操作系统是否Windows; 阅读详情

相关推荐

TI官方PSpice for TI安装避坑指南:从申请Key到解决器件搜索栏空白(附详细步骤)

本文详细介绍了PSpice for TI的安装与配置全流程,包括申请Key、解决器件搜索栏空白等常见问题。通过分步指南和实战避坑技巧,帮助工程师高效完成安装并优化性能,确保电路仿真工具的正常使用。

weixin_29299807的博客 1068

ifdef win32 linux,使用预定义宏检测编译环境(操作系统、编译器类型、编译器版本)...

在编写跨平台的程序时,我们经常使用预定义宏来检测编译环境。虽然编译器的手册中有预处理宏的介绍,但是不够详细,而且还有很多宏没有介绍。于是,我编写了一个小程序,显示常见C/C++编译器的编译器的预定义宏。一、心得最直接的办法是逐个逐个的用#ifdef判断宏是否存在,然后再printf显示其内容。可是预定义宏有些是整数、有些是字符串,还有些是关键字不能直接用printf输出,用起来挺麻烦的。在网上发现...

weixin_39732716的博客 1265

node-red 可视化探索

配置socket选择配置流程产生url。

weixin_44133581的博客 3412

C/CPP 条件编译判断系统类型

C/CPP 在预编译阶段判断系统类型

qq_32792307的博客 1859

Boost变换电路在新能源车充电系统中的创新应用与挑战

本文探讨了Boost变换电路在新能源车充电系统中的创新应用与挑战,重点分析了其在高压快充、能量回收等场景中的技术突破。通过电力电子仿真和新型器件应用,如SiC MOSFET,显著提升了功率密度和转换效率。同时,文章还深入讨论了电磁兼容性(EMC)挑战及智能控制算法的实际应用,为新能源车充电系统的优化提供了实用解决方案。

7z8x2c4v6b9的博客 217

YOLOv11改进策略【独家融合改进】| 模型轻量化二次改进:StarNet + FreqFusion,极限降参,适用专栏内所有轻量化模型

FreqFusion是一种旨在解决密集图像预测任务中特征融合问题。

Limiiiing的博客 2123

表示MSVC的版本的宏_MSC_VER

使用Microsoft Visual Studio的时候,有时候会需要知道当前使用的VC版本是多少。这个版本号被定义在_MSC_VER宏里。 可以像这样了解到版本号: [code="cpp"]#include using namespace std; int main() { int ver = _MSC_VER; // get the version cou...

Script Ahead, Code Behind 791

YOLOv11改进 | 损失函数改进篇 | MPDIoU、InnerMPDIoU助力细节涨点(二次创新 + 代码解析)

本文为读者详细介绍了YOLOv11模型的最新改进,带来的改进机制是最新的损失函数MPDIoU和融合了最新的Inner思想的InnerMPDIoU(效果打爆之前的所有的损失函数提升检测精度和处理细节方面的作用。通过深入探讨MPDIoU和InnerMPDIoU(全网首发)的工作原理和实际代码实现,本文旨在指导读者如何将这些先进的损失函数技术应用到YOLOv11模型中,以提高其性能和准确性。文章内容涵盖从理论基础、代码实现,到实际教你如何添加本文的机制到你的模型中。

Snu77的博客 4023

QT 区分编译器类型

内容预览 1.预处理命令(#ifdef,#else,#endif,#if,#ifndef) 2.如何在QT程序中区分不同编译器类型 3.如何在QT pro文件中区分不同编译器类型 一、预处理命令 1.1#ifdef #ifdef的作用是判断某个宏是否定义,如果该宏已经定义则执行后面的代码 一般使用格式如下 #ifdef 宏名 程序段1 #else 程序段2 #endif 它的意思是,如果该宏已被定义过,则对程序段1进行编译,否则对程序段2进行编译,上述格式也可以不用#else,和if、e

qq_37373742的博客 6752

【VTKExamples::PolyData】第十六期 GradientFilter

本文分享VTK样例GradientFilter,并解析接口vtkGradientFilter & vtkAssignAttribute,希望对各位小伙伴有所帮助!

qq_40041064的博客 319

毕设-MobileNetV4:给YOLOv8装上轻量化“引擎”——通用瓶颈与C2f融合的实战教程

本文介绍了一种将MobileNetV4与YOLOv8结合的目标检测模型轻量化方案。MobileNetV4通过通用瓶颈(UB)结构实现多任务适配,其核心改进包括动态卷积核、注意力机制和多路径特征聚合,显著提升特征提取能力。作者详细阐述了如何在YOLOv8框架中实现MobileNetV4的通用瓶颈模块,包括"膨胀-卷积-注意力-压缩"的流程设计,并构建完整的backbone网络。该方案通过融合MobileNetV4的轻量化优势与YOLOv8的高效检测架构,在移动设备上实现了精度与速度的良好平

FJN110的博客 503

C判断操作系统、编译器类型、编译器版本及编译位数

3. 编译位数 使用操作符来检测指针的大小。在64位编译中,指针的大小通常为8字节,而在32位编译中通常为4字节。 参考链接:

罗伯特祥的博客 1140

适航规章、标准,书籍资料下载汇总(更新中)

以下是一些收集到的适航相关的资料,分享给大家。(如果没有你想要的资料,请留言,等找到会及时更新!

qq_41854911的博客 2545

QT判断编译器类型、编译器版本、操作系统(3)

QT判断编译器类型、编译器版本、操作系统

编程大魔王 1645

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

使用宏定义判断编译器类型、版本、操作系统

使用宏定义如下: //GCC编译器 #ifdef __GNUC__ #if __GNUC__ >= 3 // GCC3.0以上 //MSVC编译器 #ifdef _MSC_VER #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 >=1

weixin_42887343的博客 4074

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

C++ 判断编译器类型、编译器版本、操作系统

//GCC编译器 #ifdef __GNUC__ #if __GNUC__ >= 3 // GCC3.0 以上 //MSVC编译器 #ifdef _MSC_VER #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 >=.

wangyi463295828的博客 3034

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Qt常用宏定义判断大全

/ 字符串化宏// 标记未使用参数(避免编译器警告)// 标记函数为弃用#endif// 标记函数为不推荐使用(但尚未弃用)

深之JohnChen的专栏 1311

Qt开发经验 --- 避坑指南(8)

Qt开发经验,常用功能

mahuifa的博客 1450

QT以及C++判断操作系统类型和CPU架构

头文件,判断预定义宏。

weixin_41502364的博客 1836

c++ 代码判断CPU 架构,操作系统类型,cmake 中判断CPU 架构,操作系统类型

在c++代码中,我们可以利用,系统或者编译器的宏定义来判断操作系统类型,cpu架构,这在跨平台程序中经常用到。 c++代码中判断 #include<iostream> int main(){ #if defined __linux__ std::cout<<"linux system"<<std::endl; #elif defined __ANDROID__ std::cout<<"android system"<<s

qq_40340448的博客 1万+

编译器和操作系统的关系

很多程序员可能有同样的疑问,编译器与操作系统之间有何关系,编译器与CPU又有何关系,动态链接器从哪查找共享库等。 让人困惑的原因有几, 第一是编译器的功能角色特殊,编译器是生成程序的程序; 第二是编译过程变得越来越复杂,一支编译器支持多种程序语言、支持共享库、编译优化,编译与链接可分开等; 第三,操作系统的介入。 今天我们试着从操作系统介入编译过程后对编译器的影响,看看操作系统与编译器有...

qq_34468774的博客 5076

C++通过宏定义判断操作系统及编译器

INTRODUCTION: C++的编译环境千奇百怪,很多时候一些代码在某些编译环境下可用,一旦移到其他环境下,就会干脆Compile Error 对此,我们可以使用C++的宏定义来判断操作系统,从而进行一些有趣的操作(貌似意义不大) 比如这样 1 #include<iostream> 2 #if !defined(_WIN32)//如果我使用的不是WIN3...

weixin_30642869的博客 2600

数据类型的大小与编译器、cpu、操作系统的关系

一、前言 关于这个话题讨论的很多,观点也很多,但是我认为数据类型的大小和编译器直接相关。另外附上一个网友的回帖: 不要迷信书、考题、老师、回帖; 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实! 关于cpu和操作系统的参见以博客: https:/...

wwwlyj123321的博客 1469

[QT_006]Qt下如何判断是何种操作系统,何种编译器

QT下操作系统,编译器判断

kongcheng253的博客 2529

windows api 库 和 判断编译器类型

编译器特征 一般情况下,有如下编译器特征: This program must be run under Win32是Borland系编译器标志(BCB、delphi) This program cannot be run in DOS mode+rich signature是微软系编译器标志(VC、MASM) This program cannot be run in DOS mode无ric...

openCpu 1386
上一篇: QT中获取类的属性和方法
下一篇: QMediaPlayer
五百五。
博客等级 码龄7年 249粉丝 177原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五百五。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值