在 C++ 之前,有 C
C 语言是由贝尔电话实验室的 Dennis Ritchie 于 1972 年开发的,主要作为一种系统编程语言(一种用于编写操作系统的语言)。Ritchie 的主要目标是开发一种易于编译的极简语言,允许高效访问内存,生成高效代码,并且是独立的(不依赖于其他程序)。对于高级语言,它被设计为给程序员很多控制权,同时仍然鼓励平台(硬件和操作系统)独立性(也就是说,不必为每个平台重写代码)。
1973 年,Ritchie 和 Ken Thompson 用 C 语言重写了大部分 Unix 操作系统。以前的许多操作系统都是用汇编语言编写的。与只能在特定 CPU 上运行的程序的汇编不同,C 具有出色的可移植性,允许 Unix 在许多不同类型的计算机上轻松重新编译并加速其应用。C 和 Unix 的命运息息相关,而 C 语言的流行在一定程度上与 Unix 作为操作系统的成功有关。
1978 年,Brian Kernighan 和 Dennis Ritchie 出版了一本名为“The C Programming Language”的书。这本书通常被称为 K&R(以作者的姓氏命名),为该语言提供了非正式的规范,并成为事实上的标准。当需要最大的可移植性时,程序员会坚持 K&R 中的建议,因为当时大多数编译器都是按照 K&R 标准实现的。
1983 年,美国国家标准协会(ANSI)成立了一个委员会,为 C 语言制定正式标准。1989 年(委员会需要很长时间才能做完一些事情),他们完成并发布了 C89 标准,通常称为 ANSI C。1990 年,国际标准化组织(ISO)采纳了 ANSI C(进行了一些小的修改)。这个版本的 C 被称为 C90。编译器最终都符合 ANSI C/C90 标准,希望程序的可移植性最佳,就按照该标准进行代码编写。
1999 年,ISO 委员会发布了一个名为 C99 的新 C 版本。C99 采用了许多功能,这些功能已经作为扩展进入编译器,或者已经在 C++ 中实现。
C++
C++(中文发音“西加加”,英文发音为“see plus plus”)由贝尔实验室的 Bjarne Stroustrup 开发,作为 C 的扩展,从 1979 年开始。C++ 为 C 语言添加了许多新功能,也许最好被看成是 C 的超集,尽管这并不绝对正确(因为 C99 引入了一些 C++ 中不存在的功能)。C++ 声名鹊起主要是因为它是一种面向对象的语言。至于什么是“对象”以及它与传统编程方法有何不同,我们将在后面的章节中介绍。
C++ 于 1998 年由 ISO 委员会标准化(这意味着 ISO 标准委员会批准了描述 C++ 语言的文档,以帮助确保所有编译器都遵循同一组标准)。该语言的微小更新于 2003 年发布(称为 C++03)。
从那时起,对 C++ 语言进行了五次重大更新(C++11、C++14、C++17、C++20 和 C++23),每次都新增了额外功能。特别是 C++11,增加了大量的新功能,并被广泛认为是该语言的新基线版本。预计未来每三年左右就会对该语言进行一次升级。
该语言的每个新正式版本都称为语言标准(或语言规范)。标准以发布年份命名。例如,没有 C++15,因为 2015 年没有新标准。
C 和 C++ 的理念
C 和 C++ 的基本设计理念可以概括为“信任程序员” — 这既美妙又危险。C++ 旨在允许程序员高度自由地做他们想做的事。然而,这也意味着语言通常不会阻止你做没有意义的事情,因为它会假设你这样做是出于某种它不理解的原因。如果不知情,新手程序员可能会陷入很多陷阱。这就是为什么在 C/C++ 中知道不应该做什么几乎与知道应该做什么一样重要的主要原因之一。
问:C++ 擅长什么?
C++ 在需要高性能以及需要对内存和其他资源进行精确控制的场景下表现出色。以下是最有可能用 C++ 编写的几种常见类型的应用程序:
- 电子游戏
- 实时系统(例如用于运输、制造等)
- 高性能金融应用(例如高频交易)
- 图形应用和模拟
- 生产力/办公应用
- 嵌入式软件
- 音频和视频处理
- 人工智能和神经网络
问:在进行这些教程之前,我需要了解 C 语言吗?
不需要!从 C++ 开始是完全可以的,我们将在此过程中教你需要了解的所有内容(包括要避免的陷阱)。
一旦你了解了 C++,如果你有需要,学习标准 C 应该很容易。如今,C 主要用于某些细分场景:在嵌入式设备上运行的代码,当你需要与其他只能与 C 交互的语言进行交互时,等等...对于大多数其他情况,建议使用 C++。