跳到内容

C++ 编程:编程语言简介

来自维基教科书,开放的书籍,开放的世界

什么是编程语言?

[编辑 | 编辑源代码]

最基本来说,"编程语言"是人类(程序员)与计算机之间的一种交流方式。程序员使用这种交流方式来向计算机发出指令。这些指令被称为“程序”。

就像我们用来互相交流的众多自然语言一样,程序员可以使用多种语言来与计算机交流。每种编程语言都有自己的一套单词和规则,称为该语言的语法。如果你要编写一个程序,就必须遵循你所使用语言的语法,否则你就不会被理解。

编程语言通常可以分为两类:低级语言高级语言,这两个概念将被介绍给你,以及它们与 C++ 的关系。

低级语言

[编辑 | 编辑源代码]
图像展示了大多数编程语言及其从 19 世纪中期到 2003 年的关系(点击这里查看全尺寸)。

计算机“语言”中较低级的层次是

机器码(也称为二进制)是低级语言的最低形式。机器码由一串 0 和 1 组成,它们组合在一起形成计算机可以执行的有意义的指令。如果你查看一页二进制代码,就会明白为什么二进制代码永远不会成为编写程序的实用选择;什么样的人才能记住一堆 1 和 0 的字符串意味着什么呢?

汇编语言(也称为 ASM),在从低级到高级的尺度上,仅仅比机器码高一级。它是计算机执行的机器语言指令的人类可读翻译。例如,程序员不是通过二进制表示(0 和 1)来引用处理器指令,而是使用更便于记忆(助记符)的形式来引用这些指令。这些助记符通常是字母的简短集合,象征着相应指令的动作,例如“ADD”表示加法,“MOV”表示将值从一个地方移动到另一个地方。

注意
汇编语言是特定于处理器的。这意味着用汇编语言编写的程序无法在具有不同处理器架构的计算机上运行。
对于 C++ 程序员来说,使用 ASM 来优化某些任务很常见,但这需要特殊考虑,因为 ASM 并不像其他语言那样可移植。

你无需了解汇编语言即可用 C++ 编程,但了解一些“幕后”情况会有所帮助。学习汇编语言还将使你作为程序员能够拥有更多控制权,并帮助你在调试和理解代码时更有帮助。

使用高级语言格式编写程序的优势远远超过任何缺点,由于大多数编程任务的规模和复杂性,这些优势包括

  • 高级程序结构:循环、函数和对象在低级语言中都具有有限的可用性,因为它们的存在本身就被认为是“高级”特性;也就是说,每个结构元素都必须进一步翻译成低级语言。
  • 可移植性:高级程序可以在不同的计算机上运行,几乎无需修改或无需修改。低级程序通常使用仅在某些处理器上可用的专用函数,必须重写才能在另一台计算机上运行。
  • 易用性:在汇编语言中需要许多行代码才能完成的任务,可以使用高级编程语言中的库函数调用简化为几行代码。例如,Java 是一种高级编程语言,它能够用大约五行代码绘制一个功能窗口,而等效的汇编语言至少需要四倍于此的代码量。

高级语言

[编辑 | 编辑源代码]

高级语言用更少的代码做更多的事情,尽管有时会牺牲性能,并且程序员的自由度也会降低。它们还试图使用英语单词的形式,这些形式可以被大多数没有编程经验的人阅读和理解。用这些语言之一编写的程序有时被称为“人类可读代码”。总的来说,抽象使得学习编程语言更容易。

没有一种编程语言是用人们所说的像“纯英语”这样的自然语言编写的(尽管 BASIC 和 COBOL 接近,而且有人正在努力在奥斯摩sian 协会的纯英语编译器和集成开发环境中实现这一点,该环境完全用纯英语编写,那么纯英语的定义就成了一个可以讨论的问题)。无论如何,由于这种对书面表达的缩减和控制的必要性,导致了编程语言的使用(构造和形式语言),程序的文本有时被称为“代码”,更具体地被称为“源代码”。在本书的代码部分中对此进行了更详细的讨论。

需要记住的是,虽然一些单词(指令)是英文的(主要为了方便),但使用的语言是不同的(通常有充分的理由,否则有人会创造一种新的编程语言),除此之外,以上段落的其余部分可能只有在你开始构建解析器、语言和编译器时才重要。语言的级别越高,它就越努力地通过支持代码的可移植性和通过增加表达式和结构的复杂性来提高人类的可理解性,来解决对硬件(CPU、协处理器、寄存器数量等)的抽象问题。

请记住,这种分类方案正在不断发展。C++ 仍然被认为是一种高级语言,但随着新语言(Java、C#、Ruby 等)的出现,C++ 开始被归类为像 C 这样的低级语言。

翻译编程语言

[编辑 | 编辑源代码]

由于计算机只能理解机器码,因此人类可读代码必须被解释或翻译成机器码。

一个解释器是一个程序(通常用更低级的语言编写),它逐个解释程序的指令,将其转换成要由解释器在运行时执行的命令。通常每个指令包含一行文本,或者提供其他明确的方式来区分每个指令,并且程序必须在每次运行时重新解释。

一个编译器是一个用于将源代码逐个指令翻译成机器码的程序。翻译成机器码可能涉及将编译器理解的一个指令拆分成多个机器指令。指令只翻译一次,之后机器就可以直接理解和执行这些指令,无论何时被指示执行。本书的编译器部分对 C++ 编译器进行了完整的介绍。

用于指示计算机的工具可能有所不同,但是无论使用哪些语句,几乎每种编程语言都将支持能够完成以下操作的结构

输入
输入是指从键盘、鼠标或有时是其他程序等设备获取信息的行为。
输出
输出与输入相反;它向计算机显示器或其他显示设备或程序提供信息。
数学/算法
所有计算机处理器(计算机的大脑)都能够执行基本的数学运算,而且每种编程语言都有一种方法可以告诉它执行这些运算。
测试
测试包括告诉计算机检查某个条件,并在该条件为真或假时执行某些操作。条件语句是编程中最重要的概念之一,所有语言都有一些测试条件的方法。
重复
重复执行某些操作,通常会有一些变化。

对 C++ 语言结构的进一步考察和分析在本书的语句部分提供。

信不信由你,这就是全部内容。你使用过的每一个程序,无论它多么简单或复杂,都是由函数组成的,这些函数或多或少地像这些函数一样工作。因此,描述计算机编程的一种方法是将一个大型复杂的任务分解成越来越小的子任务,直到最终每个子任务都足够简单,可以用这些函数之一执行。

C++ 主要编译而不是解释(有一些 C++ 解释器),然后在稍后“执行”。尽管这看起来可能很复杂,但你将在后面看到它是多么容易。

正如我们在C++ 简介章节中所见,C++ 从 C 语言演变而来,并添加了一些抽象层级(因此我们可以正确地说 C++ 的级别比 C 更高)。 我们将在本书的编程范式章节中学习这些差异的具体细节,对于那些已经了解其他语言的人来说,应该看看编程语言比较章节

华夏公益教科书