最佳 C++ 编译器

news2024/12/31 3:32:31

在这里插入图片描述
我喜欢 C++,这已经不是什么秘密。我偏爱 C++ 的一个原因是,C++ 是一个“开放”的编程语言,任何人都可以使用自己喜欢的编译器。当然,C++ 编译器的种类也很多。同样, C++ IDE 也不少,我在之前的一个博客中讨论过这个话题。

编译和运行 C++ 代码的平台(或主机),通常称为托管环境。如果 C++ 程序在没有操作系统的帮助下执行,则属于运行在独立环境中。因为缺乏操作系统,独立环境的限制比较多。相应地,在这种环境下运行 C++ 代码的要求也不少,你可以点击链接查看具体要求。也许之后,我将为 C++ 独立环境写一篇专题博客。不过,今天的博客,主要介绍了我认为的一流的编译器工具。让我们一一了解一下。

托管环境中的最佳 C++ 编译器

Microsoft Visual C++ 编译器
在这里插入图片描述这是微软与Visual Studio 捆绑的 C 和 C++ 编译器。与 Visual Studio 2019 16.10 版本捆绑在一起的编译器版本为 19.28.29914,这个编译器完全支持 C++17 核心语言功能,以及 C++17 代码库功能,部分支持 C++20 。预计Visual Studio 2022(目前还是预览版本)还将包括 Visual C++ 编译器,届时将完全支持 C++ 20 的功能。虽然 Visual C++ 编译器主要用于 Windows 开发,但使用 Windows 子系统进行 Linux(WSL)集成后,也可以用于开发本地 Linux 应用程序。点击查看精彩视频,了解关于这个话题的更多信息。

GNU 编译器集合
在这里插入图片描述GNU 编译器集合 GCC,是目前最有名的开源工具,可以用来编译多种语言,不仅限于 C 或 C++。GCC 的最新版本 GCC 11 完全支持 C++17 核心语言功能,以及 C++17 代码库功能。除了模块中的一些次要功能外,它还突破性地支持几乎所有的 C++20 语言和库功能。值得关注的是,GCC 11 还包含了 C++ 23 标准初稿的一些功能,这是继 C++ 20 之后 C++ 标准的最新修订版本。

*了解更多 GCC 信息

Clang/LLVM
在这里插入图片描述在最近的一篇博客中,我对 GCC vs Clang 进行了详细比较。我介绍了这个编译器的体系架构,并描述了 LLVM 后端如何简化优化编译器的过程。Clang/LLVM 12.0,是最新版本,目前完全支持 C++17,对 C++20 也提供了支持。当你阅读完这篇博客,你就会明白为什么许多 C++ 编译器想要将其代码放在这个开源平台上。

Intel C++ 编译器
在这里插入图片描述我已经在使用 Intel C++ 编译器(准确来说,是 Intel® oneAPI DPC++/C++ 编译器),主要用于计算密集型应用。我发现这个编译器的性能非常优秀。与Visual Studio 不同,Visual Studio 中包括了用于桌面程序开发的MFC(微软基础类)基础架构,支持 Web 程序的WebVIEW2,Intel 编译器则支持线程构建模块(当前开源为 ONAPI),Data Parallel C++(DPC++),两者的目标明显不同。支持计算密集型应用编译是 Intel 编译器的亮点,这类编译一般需要支持数据并行(使用并行 STL)、现场可编程阵列(FPGA),图形处理单元(GPU)。Intel C++ 编译器的最新版本支持 C++ 17 标准。

IBM XLC++
在这里插入图片描述IBMXLC++ 编译器支持 z/OS、Linux on Power、AIX 和 IBMi(与 PASE 一起)等平台。该编译器提供了先进的优化技术,用于开发复杂 C++ 程序的优质代码。最近,IBM 为 Power、AIX 和 IBMz 平台的 Clang/LLVM 项目编译了代码。去年(2020 年),IBM 宣布计划为其 IBMXLC++ 编译器工具链采用 Clang/LLVM 框架。这更有利于 IBM XLC++ 编译器支持最新的 C++ 标准。

独立环境中的最佳 C++ 编译器

Keil C++ 编译器
在这里插入图片描述µ Vision 是 ARM 出品的基于 Windows 的软件开发平台,用于嵌入式程序开发,支持多种平台(有关Keil µ Vision支持的部分平台列表,请参见下图)。ARM 6 编译器以 Clang/LLVM 编译器工具链为基础,完全支持 C++ 14 标准。此外,该编译器还支持功能安全标准,如 IEC 61508 和 ISO 26262,用于开发功能安全应用程序。此编译器可以直接用于高安全性程序开发,支持使用Arm®TrustZone® 隔离系统中的重要安全组件。使用 Keil µVision C++ 编译器的典型程序包括能源计量、照明、工业网络、报警系统和电机控制。业余程序开发爱好者可免费使用 Keil µ Vision,但程序大小有一些限制。

德州仪器 C/ C++ 代码生成工具
在这里插入图片描述最初的 TI Arm C/C++ 编译器工具(Arm-CGT-XX)是独立 C/C++ 编译器,目前处于维护阶段。为 Arm Cortex-M 和 Arm Cortex-R 设备编程的较新版本是 TI Arm Clang Compiler Tools (ARM-CGT-CLANG-X),是从开源 Clang/LLVM 编译器工具链派生的一个工具。德州仪器的 ARM Optimizing C/C++ Compiler v20 支持C++ 14 标准。

MPLAB XC++ 编译器
在这里插入图片描述PIC 和 AVR 微控制器之前一直使用 C 语言编程,不过较新版本的硬件已经开始支持32位(以前是 8 位),并且可以用 C++ 进行编译。Microchip 的MPLAB XC++ 编译器设计以 GCC 为基础,支持 C++03 标准库和 C++03 标准。在收购 Atmel 后,Microchip 成为嵌入式控制方案的行业领导者,其 MPLAB X 开发环境可以在 Windows、Linux 和 OS X 中运行,并与 MPLAB XC++ 编译器绑定。

总结

C++ 语言正在迅速发展,许多编译器团队最近可能也有所察觉,跟上标准并不容易。不过,将编译器建立在一个成熟的开源框架上,比如 Clang/LLVM,是保证支持 C++ 最新功能的好办法。在这篇博客中,我列出了托管环境和独立环境中的主流编译器。尽管,编译器不完全属于独立或托管的 C++ 环境,例如,EDG ECP 属于C++ 前端,且主要由编译器使用,所以不包含在这个列表中。这个列表中也不包含将 C++ 代码转换成 Java script 的转换器,如 Emscripten。以及类似于MinGW的交叉编译器也不在此列表中。

备注:点击链接查看各种编译器对 C++ 标准的支持。

点击了解 Incredibuild 的 C++ 构建加速方案,并获取试用 License!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1402340.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度了解六西格玛培训:用MINITAB软件优化数据处理和项目管理——张驰咨询

在追求卓越的道路上,六西格玛培训不仅是一种管理哲学,更是一套科学精细的工具箱。它起源于摩托罗拉的制造车间,但如今它的精粹已经应用到各个行业,无论规模大小,都在追求完美的产品和服务质量。 在张驰咨询&#xff0…

SwiftUI 纯手工打造 100% 可定制的导航栏

功能需求 何曾几时,我们是否也厌倦了 SwiftUI 界面中刻板守旧的导航栏外观,而想要自己动手充分展示灵动炸裂的创造力呢? 如上图所示:我们在 SwiftUI 中通过纯手工打造了一款 100 在本篇博文中,您将学到以下内容 功能需求1. 导航栏基本结构2. 如何感知当前发生用户拖拽行为…

Unity SRP 管线【第五讲:URP烘培光照】

本节,我们将跟随数据流向讲解UEP管线中的烘培光照。 文章目录 一、URP烘培光照1. 搭建场景2. 烘培光照参数设置MixedLight光照设置:直观感受 Lightmapping Settings参数设置: 3. 我们如何记录次表面光源颜色首先我们提取出相关URP代码&#…

ctfshow-反序列化(web267-web270)

目录 web267 web268 web269 web270 总结 web267 页面用的什么框架不知道 看源码看一下 框架就是一种软件工具,它提供了一些基础功能和规范,可以帮助开发者更快地构建应用程序。比如Yii框架和ThinkPHP框架就是两个流行的PHP框架,它们提供…

基于Java SSM框架实现共享充电宝管理系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现共享充电宝管理系统演示 摘要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于共享充电宝管理系统当然也不能排除在外,随着网络技术的不断成熟,带…

开年安全锦囊|保护现代Web应用程序的 7 大关键举措

Web 应用和 API 已成为构建业务关键型应用程序的首选工具,而这些应用程序不但面临着多云环境、新兴架构等带来的复杂性,也受到愈加严峻的暴力破解、信息泄露、会话劫持、跨站脚本、注入攻击等安全挑战。 现代 Web 应用程序防护七大关键 对于安全专业人员…

SpringSecurity(11)——核心组件和认证流程

获取用户信息 // 获取安全上下文对象,就是那个保存在 ThreadLocal 里面的安全上下文对象 // 总是不为null(如果不存在,则创建一个authentication属性为null的empty安全上下文对象) SecurityContext securityContext SecurityContextHolder.getContext(…

免费的WordPress插件大全

在当今数字化的时代,拥有一个强大的在线存在变得至关重要。而对于使用WordPress建站的用户来说,插件是提高网站功能的关键。在这篇文章中,我们将为您推荐三款免费的WordPress插件,它们不仅是147SEO软件中的佼佼者,而且…

makefile的机制,执行命令的流程分析

makefile的机制,流程分析 calc:add.o sub.o multi.ogcc add.o sub.o multi.o calc.cpp -o calcadd.o:add.cppgcc -c add.cpp -o add.osub.o:sub.cppgcc -c sub.cpp -o sub.omulti.o:multi.cppgcc -c multi.cpp -o multi.oclean:rm -rf *.o calc按照这个例子分析&am…

Flash读取数据库中的数据

Flash读取数据库中的数据 要读取数据库的记录,首先需要建立一个数据库,并输入一些数据。数据库建立完毕后,由Flash向ASP提交请求,ASP根据请求对数据库进行操作后将结果返回给Flash,Flash以某种方式把结果显示出来。 …

Spring | Srping AOP (AOP简介、动态代理、基于“代理类”的AOP实现)

目录: 1.Spring AOP简介1.1 AOP简介1.2 AOP术语 2.动态代理2.1 JDK动态代理2.2 CGLIB代理 3.基于“代理类”的AOP实现3.1 Spring的通知类型3.2 ProxyFactoryBean ( 可通知.xml配置文件完成aop功能 ) 1.Spring AOP简介 1.1 AOP简介 Spring的AOP模块,是Spring框架体系…

nginx基于IP的多虚拟主机

结合这篇文章一起:nginx虚拟主机-CSDN博客文章浏览阅读63次。虚拟主机指的就是一个独立的站点配置,是nginx默认支持的一个功能,它能够有自己独立的域名,独立的ip,独立的端口配置,能够配置完整的www服务&…

<信息安全>《2 国内主要企业网络安全公司概览(二)》

4 北京天融信科技有限公司(简称天融信) 信息内容LOGO成立日期创始于1995年总部北京市海淀区上地东路1号院3号楼北侧301室背景民营企业是否上市天融信[002212]A股市值99亿主要产品网络安全大数据云服务员工规模6000多人简介天融信科技集团(证券代码:0022…

基于内容的图像web检索系统

题目:基于内容的图像在线检索系统 简介:基于内容的图像在线检索系统(Content Based Online Image Retrieval , 以下简称 CBOIR),是计算机视觉领域中关注大规模数字图像内容检索的研究分支。典型的CBOIR系统&#xff…

使用Python对音频进行特征提取

在几年前写的使用Python对音频进行特征提取使用的是人为特征的方法进行特征提取的,近些年随着深度学习的普及,这里尝试使用深度学习方法进行特征提取。 数据集测试 之前的数据集找不到了,这个数据其实是kaggle的一个数据:www.ka…

ElasticSearch集群灾难:别放弃,也许能再抢救一下 | 京东云技术团队

1 前言 Elasticsearch作为一个分布式搜索引擎,自身是高可用的;但也架不住一些特殊情况的发生,如: 集群超过半数的master节点丢失,ES的节点无法形成一个集群,进而导致集群不可用; 索引shard的文…

蔚来卖一辆车亏20万,去年前三季度巨亏153亿

作为曾经的造车新势力“老大哥”蔚来,一边发布全新旗舰车型ET9预售价80万引争议,一边交付量在新势力垫底;更加“雪上加霜”的是,业绩亏损继续扩大。 「不二研究」据蔚来汽车三季报发现:今年三季度,蔚来净亏…

PyTorch深度学习实战(31)——生成对抗网络(Generative Adversarial Network, GAN)

PyTorch深度学习实战(31)——生成对抗网络 0. 前言1. GAN2. GAN 模型分析3. 利用 GAN 模型生成手写数字小结系列链接 0. 前言 生成对抗网络 (Generative Adversarial Networks, GAN) 是一种由两个相互竞争的神经网络组成的深度学习模型,它由…

基于taro搭建小程序多项目框架,记重点了!!!

前言 为什么需要这样一个框架,以及这个框架带来的好处是什么? 从字面意思上理解:该框架可以用来同时管理多个小程序,并且可以抽离公用组件或业务逻辑供各个小程序使用。当你工作中面临这种同时维护多个小程序的业务场景时&#…

react umi/max 页签(react-activation)

思路:通过react-activation实现页面缓存,通过umi-plugin-keep-alive将react-activation注入umi框架,封装页签组件最后通过路由的wrappers属性引入页面。 浏览本博客之前先看一下我的博客实现的功能是否满足需求,实现功能&#xf…