【基本概念1】编译、构建、调试

一、编译型语言与解释型语言

计算机只能识别由0、1组成的二进制代码,称为机器码。所以我们现在使用高级编程语言编写的程序就需要一个翻译过程,将其转换成计算机认识的二进制代码,而这个翻译过程就是由编译器(Compiler)或者解释器(Interpreter)完成的。采用编译器进行翻译的语言被称为编译型语言,而采用解释器进行翻译的语言被称为解释型语言。
在这里插入图片描述

1.1 编译型语言(代表:C、C++、汇编语言)

对于编译型语言,编写完成后,编译器将所有的源代码转换成包含机器码可执行程序(比如WIn系统下的.exe程序),便可直接运行。之后便可以随时运行这个可执行程序而不用再次编译,所谓“一次编译,无限次运行”。

但编译型语言有一个明显的弊端,就是生成的可执行程序无法跨平台运行。所谓跨平台意为在Win系统下生成的可执行程序.exe无法在Mac/Linux等其他系统下运行。有些情况下甚至源代码在不同平台下的含义也不一样,比如C语言的long整型变量在Win与Linux下占用的字节数就不同。总的来讲编译型语言的移植性较差,但由于其不需要每次执行的时候都编译,所以执行速度快。

1.2 解释型语言(代表:Python、JavaScript、PHP、Shell)

对于解释型语言,每次执行程序都需要一边翻译一边执行,用到哪些源代码解释器就将其转换成机器码,没用到的就不进行翻译。由于每次执行都要进行编译,所以解释型语言的效率低于编译型语言,甚至是数量级的差距。因此一般计算机的底层功能、关键算法或者嵌入式程序都由编译型语言开发、而一些应用软件、网站、小工具才使用解释型语言开发。

解释型语言最大的优点便是跨平台性。只要我们在不同的平台安装了对应的解释器,同一段代码便可在各个平台运行,所谓“一次编写、到处运行”。注意这里各个平台的解释器本质上是可执行文件,无法跨平台,跨平台的是源代码,不是解释器本身。

比如大名鼎鼎的python,现在就可以在Linux、Windows、MacOS、Android、FreeBSD等平台上运行,可移植性很强。

1.3 半编译半解释型语言(代表:Java、C#)

这类语言的编译器首先将源代码转换成一种中间文件(字节码文件),然后再将这种中间文件拿到专门的虚拟机中执行(如Java的JVM)。这样兼顾了运行效率以及跨平台性,字节码文件是可以在不同平台的虚拟机上运行的。

编译型语言解释型语言半编译半解释型语言
优点编译一次后,脱离了编译器也可以运行;运行效率高跨平台性好,同样的源代码可以在不同的平台上运行编译后生成的字节码文件可跨平台运行,效率高于解释型语言
缺点可移植性差,可执行文件不能跨平台使用一边执行一边转换,执行效率低效率仍低于编译型语言

二、编译与构建

  • 编译(compile):指将源代码翻译为机器码的过程
  • 构建(build):指包括编译在内的一系列处理过程。在大型工程中,构建涵盖了对源代码的编译、对库文件的链接,还有可能包含映像文件打包等其它附加操作。

2.1 C/C++常用编译器

2.1.1 桌面操作系统

  1. MSVC (Microsoft Visual C/C++)编译器:由微软开发,用于Windows系统下C/C++编译
  2. GCC(GNU Compiler Collection,GNU编译器套件):GNU是在Linux上运行的一种自由的操作系统,基于此衍生出了许多工具。GCC是一套支持C、C++、Fortan、Pascal等语言的编译器套件,运行在Linux系统下。当然GCC现在也可用于Windows系统, MinGW (Minimalist GNU for Windows)提供了一套简单方便的Windows下的基于GCC 程序开发环境。后来经过区分,一般把针对C语言的编译器称为gcc、而把针对C++的编译器称为g++。
  3. LLVM Clang编译器:Clang是一个由Apple主导编写,基于LLVM的C/C++/Objective-C编译器。更进一步来说,Clang只是一个编译器前端,其将上述的C类语言编译成一种“汇编语言(中间语言)”。接着,通过LLVM(Low Level Virtual Machine)作为后端,将这种“汇编语言”编译成针对不同机器的二进制机器语言。可在macOS、Linux、Windows等平台使用

2.1.2 嵌入式系统

  1. Keil编译器:Keil既是一个公司的名字也是一款IDE软件的名字,现被ARM收购。Keil软件包括MDK-ARM、C51、C166、C251四种单片机的编译器以及其他工具,其中MDK-ARM意为ARM相关的开发工具(Microcontroller Development Kit)。目前Keil采用的编译器都是需要收费的,支持Win与Linux系统。
    在这里插入图片描述

  2. GCC:GCC作为一款免费的编译器,也支持许多单片机系统的编译,包括GCC for ARM、AVR GCC等。一般来讲除了Keil软件,其它的开发方式大多采用GCC作为编译器,支持Win、Linux与macOS系统。

  3. IAR编译器:IAR Systems是全球领先的嵌入式系统开发工具和服务的供应商。公司成立于1983年瑞典,提供的产品和服务涉及到嵌入式系统的设计、开发和测试的每一个阶段,包括:带有C/C++编译器和调试器的集成开发环境(IDE)、实时操作系统和中间件、开发套件、硬件仿真器以及状态机建模工具。一般来讲IAR的编译器只有使用IAR的IDE开发时才会用到,仅支持Win系统。
    在这里插入图片描述

  4. DSP设计商TI(Texas Instruments,德州仪器)的CCS(Code Composer Studio)。
    在这里插入图片描述

  5. DSP设计商ADI(Analog Device, Inc. 亚德诺半导体)的Visual DSP++。
    在这里插入图片描述
    总的来讲嵌入式系统由于性能、内存十分有限,所以能支持的编译器功能也较少。

2.2 C/C++程序的构建

除了hello world这样简单的程序,大多的C/C++程序都是由多个源文件编译链接而成的,这些源文件的处理步骤一般通过makefile文件管理,以实现“自动化编译”。写好了源代码以及makefile后,通过make命令便可对整个工程完成自动编译,提升了开发效率。make是一个解释makefile指令的工具,一般的IDE都带有这个指令,也可以自行安装。

当然makefile的编写还是有一定的难度,为了进一步增加开发效率,诞生了许多makefile生成工具,其中有名的包括cmake、xmake等工具。网上有一张cmake与xmake的对比图如下:
在这里插入图片描述

三、C/C++chang常用调试器

调试(Debug)是指通过调试器(Debugger)跟踪程序的运行过程,发现程序中的逻辑错误以及缺陷等问题。在调试过程中,我们可以监控程序的每一个细节,包括变量值、线程调度、内存情况等。一般的IDE都会自带调试器,目前常见的调试器列举如下:

  1. Remote Debugger:VC/VS自带的调试器,由微软开发,与IDE紧密衔接,使用方便。
  2. WinDbg:由微软开发的Windows系统下轻量级的调试器,功能齐全,但指令较为复杂。
  3. LLDB:XCode自带的调试器,用于macOS系统下的开发。
  4. GDB(GNU symbolic debugger):与编译器GCC同宗同源,最早用于Linux系统下的调试,现也能移植于WIndows与macOS系统。

总结

本文介绍了一些关于编译、构建、调试的基础概念以及一些常用的C/C++编译器与调试器。

  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 编译原理是计算机科学中非常重要的一门课程,而编译原理本科教学版pdf则是一本非常好的教材。这本教材讲解了编译器的基本原理及其构建方法,既注重了理论的探究,又注重了实践的操作。 在理论方面,教材对编译器的整体结构、语法分析、中间代码生成、代码生成、优化等方面进行了详细的解释,并提供了大量的算法与数学工具,让学生能够更好地理解编译器的工作流程和基本原理。 在实践方面,教材提供了丰富的编程实践,如使用C++语言编写表达式的编译器、使用Java编写编译器等等,帮助学生通过实践来理解编译器的实现过程。 此外,编译原理本科教学版pdf还提供了大量的习题和实验,帮助学生深入理解和掌握编译原理的知识,并激发学生的学习兴趣和创造力。 总之,编译原理本科教学版pdf是一本非常好的教材,能够帮助学生全面、深入地了解编译器的工作原理,提高编译器设计和实现的能力,是计算机科学专业学生必备的教材之一。 ### 回答2: 编译原理本科教学版pdf是一份非常重要的教学材料,它主要介绍了编译原理的基本概念、理论和实践知识。在计算机科学领域,编译原理是一门基础课程,它涵盖了许多重要的基础知识,如词法分析、语法分析、语义分析、代码生成等方面。 这份教学版pdf将编译原理课程划分为了不同的模块,每个模块涵盖了不同的知识点。它通过简洁明了的文字和图示来讲解复杂的概念和算法,让学生们能够更好地理解和掌握课程内容。 同时,这份pdf还提供了许多习题和实践案例,让学生们能够通过实践来巩固所学知识。这些习题和案例既能够帮助学生们更好地理解课程概念,也能够提升他们的编程能力和代码调试能力。 总之,编译原理本科教学版pdf是一份非常重要的教学材料,它能够帮助学生们更好地掌握编译原理这门基础课程,并为他们今后的学习和研究提供坚实的基础。 ### 回答3: 编译原理是计算机科学中重要的一门课程,它主要研究编程语言的设计原理及其在计算机中的编译和解释过程。编译原理课程的教材有很多,编译原理本科教学版pdf是其中一种成体系的教材,它深入浅出地介绍了编译原理的基础知识、词法分析、语法分析、中间代码生成、代码优化等相关内容。 编译原理本科教学版pdf教材的特点是理论知识和实践应用紧密结合,且内容全面、系统性强,能够帮助学生全面理解编译原理相关知识。在教学过程中,教师可以根据本教材的章节进行讲解,包括基本概念的介绍、正则表达式、自动机理论、语法分析及中间代码生成等方面的知识点。教师还可以结合编程语言的实践案例,将教学内容融入到实践场景中,以帮助学生更好地理解和掌握编译原理的核心知识。 此外,编译原理本科教学版pdf还给出了大量的编程练习题和解答,以帮助学生深入了解编译原理的实际应用,并提高编程能力。这些习题从简单到复杂,涵盖了各个方面的知识点,学生可以根据自己的程度进行选择和练习。 总之,编译原理本科教学版pdf是一本很好的教材,讲解详细,案例丰富,习题全面,可以帮助学生深入理解编译原理相关知识,提高编程能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值