2023-5-20-各种编译器的全面学习

news2024/9/30 1:42:12


🍿*★,°*:.☆( ̄▽ ̄)/$:*.°★* 🍿

💥💥💥欢迎来到🤞汤姆🤞的csdn博文💥💥💥
💟💟喜欢的朋友可以关注一下,下次更新不迷路💟💟
😆😆😆私聊获取个人订阅号哦,欢迎订阅共同学习😆😆😆
💖💖💖💖可以加入大家庭群聊,一起学习天天有福利💖💖💖💖





🍬本文摘要

在这里插入图片描述

在编学习的时候会学到各种各样的编译器,但是一直没有弄个明白,这篇文章就是为了搞明白编译器到底有几种。


目录

  • 🍬本文摘要
  • 😉一、编译器是什么
  • 🥚二、编译器有几种
  • 🎉三、GCC是什么
  • 🥚四、Clang是什么
  • 🎂五、Visual C++是什么
  • 🥩六、G++是什么
  • 🍚七、Gcc和G++的区别
  • 🍳参考文献
  • 🧊文章总结



😉一、编译器是什么

编译器是一种将高级语言源代码转换为可执行代码的程序。它是计算机程序开发中的重要工具之一,可以将人类易于理解的高级语言代码转换成计算机可执行的低级机器码,并进行优化和错误检查等操作。

编译器通常由前端、后端和中间层组成。前端负责将高级语言代码转换成中间表示或汇编代码,包括词法分析、语法分析、语义分析等操作;后端负责将中间表示或汇编代码转换成机器码,包括指令选择、寄存器分配、代码优化等操作;中间层则负责将前端产生的中间表示在不同步骤之间传递,并对其进行必要的修改和优化。

编译器的主要功能包括:

  1. 语法检查:将源代码转换成抽象语法树,检查代码是否符合语法规范。
  2. 语义检查:对抽象语法树进行语义检查,确保代码逻辑正确且无歧义。
  3. 代码生成:将语法、语义检查通过的代码转换成目标机器可执行的汇编或机器码。
  4. 代码优化:对生成的汇编或机器码进行优化,以提升程序的性能和效率。
  5. 错误检查和报告:检测代码中的错误和警告,并向程序员提供相应的提示或错误信息。

常见的编译器有GCC、Clang、Visual C++等,它们支持不同的编程语言和平台,具有各自独特的特点和功能。除了传统编译器之外,还有JIT(Just-In-Time)编译器和解释器等不同种类的编译器,它们都在不同场合和需求下发挥着重要的作用。


🥚二、编译器有几种

根据编译器的实现方式、支持的编程语言、目标平台等不同,可以将编译器分为多种类型。以下是常见的几种编译器:

  1. 前端编译器(Front-end compiler):负责将高级语言源代码转换成中间代码或汇编代码,通常与后端编译器配合使用。
  2. 后端编译器(Back-end compiler):负责将中间代码或汇编代码转换为机器码,通常与前端编译器配合使用。
  3. 交叉编译器(Cross-compiler):用于在一种平台上编译出另一个平台的可执行文件,例如在Windows平台上编译出Linux平台的可执行文件。
  4. 本地编译器(Native compiler):用于在本地平台上编译可执行文件。
  5. 混合编译器(Hybrid compiler):将前端编译器和后端编译器合并在一起,即可以将高级语言源代码直接编译成机器码。
  6. 解释器(Interpreter):逐行解释执行源代码,不生成可执行文件。

除了以上常见的编译器类型之外,还有许多特定领域的编译器,例如嵌入式系统编译器、GPU编译器、JIT编译器等,都有其独特的功能和
实现方式。总之,编译器种类繁多,不同的编译器适用于不同的场景和需求。


🎉三、GCC是什么

GCC是GNU编译器集合(GNU Compiler Collection)的缩写,是一组由自由软件基金会(Free Software Foundation)开发和维护的编程语言编译器。GCC支持多种编程语言,包括C、C++、Fortran、Objective-C、Ada等,可以在多种平台上使用,例如Linux、Windows、macOS等。

GCC最早于1987年发布,作为GNU操作系统中的一部分,提供了一个可跨平台的编译器工具链,依托于自由软件的思想以及开源社区的力量,逐渐成为了开源社区中最为重要的编译器之一。GCC在处理优化、代码生成、调试和错误检查等方面有着卓越的表现,在许多领域都被广泛使用,例如嵌入式系统、编程语言研究、高性能计算等。

除了主流的C/C++编译器外,GCC还包括了一些相关的工具和库,例如汇编器、链接器、动态链接库、gdb调试器、标准库实现等,这些工具和库共同构成了完整的开发环境。此外,GCC也是很多其他编译器的基础,例如LLVM/Clang等。

总之,GCC是一组广泛使用的编程语言编译器,具有优秀的代码优化和生成能力,支持多种编程语言和平台,是开源社区中不可或缺的一部分。


🥚四、Clang是什么

Clang是一种开源C语言家族及Objective-C编译器的实现,也是一个用于C++和Objective-C++的交叉编译器。它由LLVM项目(Low Level Virtual Machine)开发,采用了模块化设计,支持多种平台,包括Linux、macOS、Windows等。

Clang的目标是提供更快、更可靠和更易于分析的编译器。与传统的GCC编译器相比,Clang具有以下优点:

  1. 更快的编译速度:Clang能够进行快速的增量式编译,并且可以对代码进行更细粒度的优化,从而在编译效率方面表现更优秀。
  2. 更好的错误提示:Clang在编译过程中能够检测更多的错误,并给出更准确的错误提示信息,使得程序员能够更快地修复代码问题。
  3. 更好的IDE支持:Clang提供了一组API接口,可以被IDE工具调用,从而为用户提供更完善的代码编辑和错误提示功能。
  4. 更好的兼容性:Clang支持GCC的多数语言扩展特性,同时还提供了一些额外的特性和扩展,比如Block语法、Lambda表达式等。

除了作为编译器之外,Clang还包含了一些其他有用的工具,例如格式化器(clang-format)、静态分析器(clang-analyzer)等,这些工具都可以帮助程序员提高开发效率。

总之,Clang是一种优秀的C语言家族和Objective-C编译器的实现,具有快速、准确和易用等特点,在计算机科学领域中得到了广泛的应用和推广。


🎂五、Visual C++是什么

Visual C++是微软公司推出的一款集成开发环境(IDE)(缩写MSVC),用于C++程序开发。它包括了一个C++编译器、调试器、图形界面设计器和一系列的库函数等工具,可用于Windows平台上的应用程序和系统级编程等方面。

Visual C++最早于1993年发布,自此以后不断地更新和升级。它采用了所谓的“窗体设计器”技术,使得用户可以通过拖拽控件的方式来设计Windows GUI界面,从而大大简化了GUI应用程序的开发过程。此外,Visual C++内置了丰富的类库和模板库,如MFC(Microsoft Foundation Classes)、ATL(Active Template Library)等,这些库可以帮助开发者更快速地完成Windows应用程序的开发。

Visual C++还提供了强大的调试功能,包括代码跟踪、内存泄露检测、多线程调试等,可以帮助开发者在开发和测试过程中快速定位问题,并提高程序的稳定性和可靠性。

总之,Visual C++是一款功能强大的C++集成开发环境,可以帮助开发者更快速、更高效地开发基于Windows平台的应用程序和系统级编程等项目。


🥩六、G++是什么

G++是GNU编译器集合(GCC)中的C++编译器,是一种跨平台开源的编译器。它支持多种操作系统和硬件平台,并可以生成各种格式的目标文件和可执行文件。

G++采用了模块化设计,包括前端、后端和中间层等组件,能够完成C++源代码的编译、优化和生成可执行文件等操作。其提供了丰富的编译选项,例如指定编译器版本、调试信息、优化等级等,还支持多种标准C++语言特性,如C++11、C++14、C++17等。

除了编译器之外,G++还包含了一些相关的工具和库,例如汇编器、链接器、动态链接库、gdb调试器、标准库实现等,这些工具和库共同构成了完整的开发环境。

总之,G++是一种功能强大的C++编译器,具有跨平台、开源、灵活等特点,在计算机科学领域中得到了广泛的应用和推广。


🍚七、Gcc和G++的区别

GCC和G++都是GNU编译器集合(GNU Compiler Collection)的一部分,二者的主要区别在于它们所针对的编程语言不同。

GCC是通用的编译器,可以编译多种编程语言,包括C、C++、Fortran、Objective-C、Ada等,因此它也被称为GNU C编译器。GCC可以根据源代码文件的扩展名自动判断编程语言类型,并调用相应的前端进行编译。

G++则是GCC集合中特定的C++编译器,它专门用于编译C++源代码,提供了一些额外的特性和支持,例如C++标准库实现、对C++11、C++14、C++17等最新标准的支持、对C++模板的完整支持等。

除了针对不同的编程语言之外,GCC和G++在编译选项上也有所区别。例如,-lstdc++选项只对G++有效,它用于连接C++标准库;而-fobjc-exceptions选项只能用于GCC编译Objective-C代码,不能用于C++代码。

总之,GCC是通用的编译器,支持多种编程语言,而G++则是GCC集合中专门针对C++的编译器,提供了更好的C++语言支持和库函数实现。


🍳参考文献

🧊文章总结

提示:这里对文章进行总结:

  本文讲了编译器有哪些,以及它们是否支持跨平台。






更多好文推荐

🍸2021-4月Python 机器学习——中文新闻文本标题分类
🍹2021年4月-(计算机网络)小型校园网络模拟搭建,最全最准确版
🍺2022-10-31-基于用户的协同过滤推荐算法实现+MAE+RMSE
🍻2022-11-28-大数据可视化,特征维度大于50
🥂2023-3-9-一篇简短的文章把C++左右值关系讲的透透彻彻

上一篇
End
下一篇

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

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

相关文章

网站投票软件投票链接制作软件投票链接小程序投票程序

近些年来,第三方的微信投票制作平台如雨后春笋般络绎不绝。随着手机的互联网的发展及微信开放平台各项基于手机能力的开放,更多人选择微信投票小程序平台,因为它有非常大的优势。 1.它比起微信公众号自带的投票系统、传统的H5投票系统有可以图…

LLVM-Clang交叉编译详细教程

文章目录 前言对比GCC与ClangClang交叉编译参数选项安装交叉编译器交叉编译生成二进制文件Target Arch列表Target Triple列表参考文档后话 前言 最近自己写了个C的小项目,想在Windows编译出其他平台的二进制文件的话,只能交叉编译了,于是就选…

性能测试-JMeter分布式测试及其详细步骤

性能测试概要 性能测试是软件测试中的一种,它可以衡量系统的稳定性、扩展性、可靠性、速度和资源使用。它可以发现性能瓶颈,确保能满足业务需求。很多系统都需要做性能测试,如Web应用、数据库和操作系统等。 性能测试种类非常多,…

深入学习《c语言函数》

📕博主介绍:目前大一正在学习c语言,数据结构,计算机网络。 c语言学习,是为了更好的学习其他的编程语言,C语言是母体语言,是人机交互接近底层的桥梁。 本章学习函数。 让我们开启c语言学习之旅吧…

Mybatis管理数据库

快速入门 使用idea工具操作数据库使用Mybatis查询所有用户数据第一步创建springboot工程,数据库表user,实体类User第二步,引入Mybatis的相关依赖,配置Mybatis(数据库连接信息)第三步,编写sql语句…

Jmeter工具+ant+jenkins实现持续集成

jmeterantjenkins持续集成 一、下载并配置jmeter 首先下载jmeter工具,并配置好环境变量;参考: jmeter默认保存的是.jtl格式的文件,要设置一下bin/jmeter.properties,文件内容,保存jmeter.save.saveservice.output_f…

关于华为云负载均衡ELB健康检查显示离线的排查问题及解决办法

由于项目中经常涉及到检修升级操作,在进行检修升级时,服务就需要停止一段时间,检修结束后重启,在此期间相关的功能页面都将无法访问。甲方反馈,需要停止服务的检修工作暂时不予执行。因此,为了不耽误系统的…

低代码搭建制造管理系统,你要知道的哪些事~

随着数字化转型的推进,制造业也逐渐意识到数字化转型的重要性。数字化转型不仅可以提高制造业的效率和品质,还可以降低成本和提高客户满意度。在数字化转型中,低代码搭建制造管理系统是一种比较有效的方式。本文将介绍低代码搭建制造管理系统…

深入篇【C++】类与对象:再谈构造函数之初始化列表与explicit关键字

深入篇【C】类与对象&#xff1a;再谈构造函数之初始化列表与explicit关键字 Ⅰ.再谈构造函数①.构造函数体赋值②.初始化列表赋值【<特性分析>】1.至多性2.特殊成员必在性3.必走性&#xff1a;定义位置4.一致性5.不足性 Ⅱ.explicit关键字①.隐式类型转化②.作用 Ⅰ.再谈…

Spring Cloud Alibaba 集成 sentinel ,sentinel控制台不能检测到服务,但是在命令行配置启动参数就能看到服务

问题背景 Spring Cloud Alibaba 集成 sentinel &#xff0c;sentinel代码写的限流降级的功能都是好的&#xff0c;但是sentinel控制台不能检测到服务&#xff0c;在程序启动时配置JVM启动参数&#xff08;-Dcsp.sentinel.dashboard.serverlocalhost:18080 -Dproject.namename-…

分公司的负责人要如何承担责任

一、分公司的负责人要如何承担责任 1、分公司的负责人不需要承担责任&#xff0c;因为没有法人资格&#xff0c;没有独立的财产权。根据相关法律规定&#xff0c;分公司的债务由总公司承担连带责任&#xff0c;当然可以先由分公司的全部财产承担。 2、法律依据&#xff1a;《…

小白量化《穿云箭集群量化》(9)用指标公式实现miniQMT全自动交易

小白量化《穿云箭集群量化》&#xff08;9&#xff09;用指标公式实现miniQMT全自动交易 在穿云箭量化平台中&#xff0c;支持3中公式源码运行模式&#xff0c;还支持在Python策略中使用仿指标公式源码运行&#xff0c;编写策略。 我们先看如何使用指标公式源码。 #编程_直接使…

【2023秋招】每日一题:P1087-美团3-18真题 + 题目思路 + 所有语言带注释

2023大厂笔试模拟练习网站&#xff08;含题解&#xff09; www.codefun2000.com 最近我们一直在将收集到的各种大厂笔试的解题思路还原成题目并制作数据&#xff0c;挂载到我们的OJ上&#xff0c;供大家学习交流&#xff0c;体会笔试难度。现已录入200道互联网大厂模拟练习题&…

【C生万物】 指针和数组笔试题汇总 (下)

欢迎来到 Claffic 的博客 &#x1f49e;&#x1f49e;&#x1f49e; &#x1f449; 专栏&#xff1a;《C生万物 | 先来学C》&#x1f448; 前言&#xff1a; 承接上文&#xff0c;继续进行指针和数组的练习。 目录 Part2:指针笔试题 1.做题 …

硬件系统工程师宝典(24)-----如何能够正确理解三极管?

各位同学大家好&#xff0c;欢迎继续做客电子工程学习圈&#xff0c;今天我们继续来讲这本书&#xff0c;硬件系统工程师宝典。上篇我们说到不同材质的磁珠&#xff0c;频率阻抗特性不同&#xff0c;根据磁珠的频率阻抗特性曲线&#xff0c;磁珠在低频时电感起作用&#xff0c;…

Java开源工具库使用之压测JMeter

文章目录 前言一、概念原理1.1 Jmeter 原理1.2 性能测试术语1.3 web项目性能标准 二、常用元件2.1 线程组2.2 取样器2.3 控制器2.4 定时器2.5 前置/后置处理器2.6 配置元件2.7 监听器 三、插件3.1 第三方插件3.2 录制插件 四、JSR223 脚本及函数4.1 JSR223 脚本4.2 函数变量 五…

职场难题:克服压力、提升自我能力,勇闯职场巅峰

在当今激烈的职场竞争中&#xff0c;职场难题时常出现&#xff0c;如何进行有效沟通、如何应对工作压力、如何提升职业能力等&#xff0c;这些问题都是需要克服的问题。作为一名在职场中求生存&#xff0c;求发展的职业人士&#xff0c;我们必须学会适应这些挑战&#xff0c;掌…

Java基础面试题突击系列1

&#x1f469;&#x1f3fb; 作者&#xff1a;一只IT攻城狮 &#xff0c;关注我不迷路 ❤️《java面试核心知识》突击系列&#xff0c;持续更新… &#x1f490; 面试必知必会学习路线&#xff1a;Java技术栈面试系列SpringCloud项目实战学习路线 &#x1f4dd;再小的收获x365天…

面了个 Java 实习生,小伙很优秀!

大家好&#xff0c;我是鱼皮&#xff0c;前几天给自己的公司面试了一位 Java 暑期实习生&#xff0c;候选人目前是大三。 整个过程我都录屏了&#xff0c;并且在征得候选人的同意后&#xff0c;把面试过程分享出来。一方面是希望对其他在学编程找工作的小伙伴有一些启发和参考…

强化学习代码规划之深度学习预备

现在到了自动编码器和解码器&#xff0c;同样&#xff0c;先练几遍代码&#xff0c;再去理解 import torch import torch.nn as nn import torch.utils.data as Data import torchvision import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from matpl…