C++ 不同的编译器
本文解释了许多与编译器相关的方面。在这里,我们描述了C++语言与编译器之间的交互。为什么需要编译器?以下是一些解决方案;众所周知,计算机可以读取由0和1组成的机器语言编写的指令。源代码是用高级语言编写的。
为了使计算机理解,我们需要进行翻译或解释。编译器是与计算机进行交流的最用户友好的方法。在编译每个C++文件后,会创建一个目标文件。编译器首先执行预处理,然后进行编译和生成目标文件的过程。C++程序中有数百行的模板编程。因此,用户必须提高自己的生产力。
C++编译过程
一个C++程序(.cpp)由头文件(.h)和源代码组成。此外,””命令用于将开源库或文件连接到C++程序中。
编译C++程序涉及三个阶段:
- 预处理:在此步骤中,使用源CPP文件的包含文件,并在那里更改代码。该过程不涉及使用头文件。类似地,当调用宏和内联函数时,预处理会在使用之前替换它们的代码。
- 编译:在文件经过预处理后,将其编译生成扩展名为”.o”的目标文件。
- 链接:连接过程涉及将目标文件与应用程序使用的任何第三方应用程序和函数连接起来。最终软件将正确运行。
主机环境下的顶级C++编译器
1. 微软Visual C++编译器
Microsoft将C++和C编译器包含在Visual Studio中。当前的编译器版本是19.28.29914,它随Microsoft Visual 2019版本16.10一起提供,完全支持C++17核心语言增强,包括C++17库元素,并部分支持C++20元素。
预计在Visual Studio 2022中将包含Visual C++编译器,目前已提供预览版,这将实现对C++20功能的完全支持。Visual C++编译器可用于创建本地Linux程序,尽管通常它用于使用Windows Subsystem for Linux (WSL)接口进行Windows开发。
2. GNU编译器集合
可能是最好的开源应用之一是GNU编译器集合,或者GCC。除了C和C++之外,它是用来组装许多其他语言的工具集。最新的GCC版本——GCC 11完全支持C++17核心语言和C++17库特性。除了在Modules中进行了一些小的增强之外,它还为几乎每个C++20语言和库特性提供了实验性的支持。值得注意的是,GCC 11还整合了C++23标准的部分特性,这是C++标准的第23次迭代,接续于C++20。
3. Clang/LLVM
GCC和Clang在我的最新博文中进行了对比。我详细概述了编译器的设计以及LLVM后端使得整合新的优化变得简单的方法。最新版本的Clang/LLVM 12.0完全支持C++17,而C++20则处于实验性支持阶段。阅读本页面时,您将了解为什么许多其他C++编译器选择在这个开源框架上构建他们的软件。
4. 英特尔C++编译器
对于需要大量工作的应用程序,我使用了英特尔C++编译器(具体来说是Intel® oneAPI DPC++/C++编译器),并且我对它的表现非常满意。与支持基于Web的应用程序和计算机应用程序开发的MFC(Microsoft基础类)以及WebView2支持相反,英特尔的编译器支持数据并行C++(DPC++)和线程构建块(目前开源为oneAPI),展示了关注点的不同。英特尔编译器的优点在于计算成本较高的并行计算程序(使用并行STL),支持可编程门阵列(FPGA)和图形处理单元(GPU)。 C++17标准与最新版本的英特尔C++编译器兼容。
5. IBM XLC++
对于操作系统,如z/OS、Ubuntu on Power、Unix和Aix I,提供了IBM XLC++编译器(带有PASE)。由于该编译器提供了先进的优化技术,因此可以使用优化代码创建复杂的C++应用程序。IBM已经向Clang/LLVM项目提供了Powers、Ibm和Aix Z系统的代码。IBM在去年(2020年)表示,IBM XLC++编译器工具集将使用Clang/LLVM框架。因此,IBM XLC++编译器应该能够处理最新的C++标准,没有问题。
6. MinGW
这是一个开源程序,不需要其他组件,并且与Microsoft Windows开发非常兼容。它包括了C、C++和Fortran的GCC编译器。由于GCC中的ANSI兼容性提供的高度可移植性,客户更喜欢这个编译器。使用Windows 32或min32,可以将自定义项目与其他软件包一起集成,并获得特定版本的使用许可。由于G++,我们可以完全访问源代码。它的速度和易用性,需要DLL库,这是主要的优势。
结论
从编程的角度来看,IDE和C++编译器是非常重要的。我们可以使用这些IDE创建和开发多种复杂的C++应用程序。这些IDE的主要优点是它们允许我们在一个IDE内完成编译过程。
IDE还配备了源代码编辑器,可以帮助我们编写代码。这些开源编辑器提供了许多功能,如自动完成和IntelliSense,可以帮助我们更快地编写代码。