C++学习笔记_0引言

0 引言

0.1 程序和编程语言

程序和可移植性

计算机程序是一系列用于指导计算机按指定顺序执行某些操作的指令,由编程语言编写。当计算机执行程序中指令所描述的操作时,我们称其正在运行/执行程序。

A computer program is a sequence of instructions that directs a computer to perform certain actions in a specified order. Computer programs are typically written in a programming language. When a computer is performing the actions described by the instructions in a computer program, we say it is running or executing the program.

平台指的是一组兼容的硬件和软件,为程序提供运行环境。一般来说,如果程序使用了一个平台提供的功能或服务,它将依赖于该平台而无法在其他平台上运行,除非进行专门的修改。这种修改程序以使其在不同平台上运行的行为被称为移植,可以轻松从一个平台转移到另一个平台的程序被认为是可移植的

The term platform refers to a compatible set of hardware and software (OS, browser, etc…) that provides an environment for software to run.

Platforms often provide useful services for the programs running on them. For example, a desktop application might request the operating system give them a chunk of free memory, create a file over there, or play a sound. The running program doesn’t have to know how this is actually facilitated. If a program uses capabilities or services provided by the platform, it becomes dependent on that platform, and cannot be run on other platforms without modification. A program that can be easily transferred from one platform to another is said to be portable. The act of modifying a program so that it runs on a different platform is called porting.

编程语言的家族

机器语言

计算机的CPU只能处理使用机器语言编写的指令。特定的CPU能够理解的所有机器语言指令的集合称为指令集

机器语言指令示例:10110000 01100001

每条指令都由一串1和0组成。每个单独的0或1称为二进制数字(binary digit),简称为位(bit)。机器语言指令中的位数各不相同,例如x86一般默认使用32位的指令集架构,而x64使用64位。除此之外,每个兼容CPU系列(例如x86、Arm64)都有自己的机器语言,并且该机器语言与其他CPU系列的机器语言不兼容,这意味着为某个CPU系列编写的机器语言程序无法在其他CPU系列的CPU上运行。

First, each instruction is composed of a sequence of 1s and 0s. Each individual 0 or 1 is called a binary digit, or bit for short. The number of bits in a machine language instruction varies – for example, some CPUs process instructions that are always 32 bits long, whereas some other CPUs (such as those from the x86 family, which you may be using) have instructions that can be a variable length.

Second, each family of compatible CPUs (e.g. x86, Arm64) has its own machine language, and this machine language is not compatible with the machine language of other CPU families. This means machine language programs written for one CPU family cannot be run on CPUs from a different family!

汇编语言

汇编语言是一种编程语言,本质上是一种更易于人类阅读的机器语言。由于CPU无法理解汇编语言,因此汇编程序必须先翻译成机器语言才能执行。这个翻译过程由一个叫汇编器的程序完成。每个CPU系列都有自己的汇编语言。

低级语言

机器语言和汇编语言因为对机器架构的抽象程度极低,均被视为低级语言。低级语言的主要优势在于速度快。

低级语言有很多明显的缺点:

  • 用低级语言编写的程序不可移植。
  • 编写程序需要对架构本身有深入的了解。
  • 难以阅读和理解。
  • 编写复杂的汇编程序非常困难。
高级语言

为了解决上述缺点,人们开发了许多高级编程语言,例如C、C++、Java等。

用高级语言编写的程序必须先翻译成机器语言才能运行。主要有两种方法:编译(compiling)解释(interpreting)

C++程序是编译型的。编译器是一组/个程序,它读取一种语言的源代码,并将其翻译成另一种语言(通常是低级语言)。C++编译器将C++源代码编译成机器语言,这些机器码可以打包成可执行文件,分发给其他人并由操作系统启动。运行可执行文件不需要安装编译器。

解释器是一种直接执行源代码中的指令而无需先编译的程序。解释器往往比编译器更灵活,但在运行程序时效率较低,因为每次运行程序时都需要进行解释过程。这也意味着必须在每台将运行解释程序的机器上安装解释器,例如Python。

高级语言允许程序员编写程序,而无需了解程序运行的平台。这不仅使程序更容易编写,而且使程序的可移植性大大提高,能够在多个平台上运行的程序被称为跨平台程序

0.2 C++简介

C++(发音为“see plus plus”)为 C 语言添加了许多新功能,C++ 相对于 C 最显著的创新是它支持面向对象编程。

C++ 擅长的几种应用程序:

  • 电子游戏
  • 实时系统(例如运输、制造等)
  • 高性能金融应用程序(例如高频交易)
  • 图形应用程序和模拟
  • 生产力/办公应用程序
  • 嵌入式软件
  • 音频和视频处理
  • 人工智能和神经网络

C++程序开发流程:

  • 定义您想要解决的问题
  • 确定如何解决问题

在确认解决方案之前不要立即开始编写代码,而应该有详细的记录,并能够模块化构建以便于重复使用和修改,发生意外情况时可以有效报错和正常恢复。

  • 编写程序

在编写程序时,首先需要使用一门编程语言如C++,其次是任何一个文本编辑器(如Windows的记事本,Unix的vi)来编写C++指令,也就是程序的源代码。一个简单的记事本就能完成源代码的编写,但我们建议使用转为编程设计的编辑器。C++源代码文件的扩展名为.cpp

  • 编译

C++ 编译器会按顺序遍历程序中的每个源代码文件,并执行两项重要任务:

首先,编译器会检查你的 C++ 代码,确保它符合 C++ 语言规则。如果不符合,编译器会给出错误信息(以及相应的行号)。

其次,编译器将 C++ 代码转换为机器语言指令。这些指令存储在一个称为**目标文件(object file)**的中间文件中。目标文件还包含后续步骤中必需或有用的其他数据(包括链接器所需的数据,以及调试所需的数据)。目标文件通常命名为name.o或name.obj。

  • 链接目标文件和库并创建所需的输出文件

编译器成功完成后,另一个名为链接器的程序开始运行。链接器的作用是合并所有目标文件,并生成所需的输出文件(例如可以运行的可执行文件)。这个过程称为链接。如果链接过程中的任何步骤失败,链接器都会生成一条描述该问题的错误消息,然后中止运行。

首先,链接器读取编译器生成的每个目标文件并确保它们有效。

其次,链接器确保所有跨文件依赖关系都得到正确解析。例如,如果您在一个 .cpp 文件中定义了某个内容,然后在另一个 .cpp 文件中使用它,链接器会将这两个内容连接起来。如果链接器无法将对某个内容的引用与其定义连接起来,则会收到链接器错误,并且链接过程将中止。

第三,链接器通常链接一个或多个库文件,这些库文件是已“打包”以供其他程序重用的预编译代码的集合。

最后,链接器输出所需的输出文件。通常,这是一个可以启动的可执行文件。

  • 测试和调试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值