C is quirky, flawed, and an enormous success.
—— Dennis Ritchie
C语言很古怪,有缺陷,但却取得了巨大的成功。丹尼斯·里奇
什么是C语言?
C语言是一种通用的、过程式的计算机编程语言,由丹尼斯·里奇(Dennis Ritchie)于1972年在贝尔实验室开发。最初是为了重写 UNIX 操作系统而设计的。
在此之前,操作系统多用汇编语言编写,极其繁琐且难以移植。C语言的出现,改变了这一局面。
它被称为它常被称为“工业界的通用语言或现代编程语言之基”。许多现代流行的语言(如 C++、Java、C#、Python、PHP、JavaScript)在语法和逻辑上都深受C语言的影响。
C语言的核心特点
C语言的历史是一部计算机科学的进化史。它的诞生不仅改变了编程的方式,更直接促成了UNIX操作系统的辉煌,并奠定了现代软件产业的基础。
C语言的历史
1. 史前时代:从 Multics 到 B语言(1960s)
C语言并非凭空出现,它是为了解决具体问题而诞生的。
背景(Multics计划的失败):1960年代,贝尔实验室(Bell Labs)、麻省理工学院(MIT)和通用电气(GE)联合开发一个名为 Multics 的庞大操作系统。该项目目标宏大但过于复杂,最终贝尔实验室退出了该项目。
Ken Thompson 与 UNIX 的雏形:贝尔实验室的研究员 肯·汤普逊(Ken Thompson)为了在一台闲置的 PDP-7 计算机上运行他写的《太空旅行》(Space Travel)游戏,开发了一个简易的操作系统,这后来演变成了 UNIX。Ken Thompson 当初是为了对应 Multics(多用户),起名为 Unics(单用户),后来才演变为 Unix。
B语言的诞生:最初 UNIX 是用汇编语言写的。为了更方便地开发,Thompson 基于一门古老的语言 BCPL,删减了大量内容,创造了 B语言(取 BCPL 的首字母)。
局限性:B语言是无类型的(typeless),在处理字符和浮点数时非常麻烦,且在性能较强的新机器(PDP-11)上运行效率低下。
2. C语言的诞生(1972–1973)
这是历史性的转折点。
丹尼斯·里奇的改良:同在贝尔实验室的 丹尼斯·里奇(Dennis Ritchie)决定改进 B语言。
New B → C:1972年,里奇在 B语言的基础上引入了数据类型(如 char, int, float, struct)和指针的概念。因为它是 B语言的继承者,所以取名为 C语言(BCPL 的第二个字母,或者 B 的下一个字母)。
伟大的重写(1973):这是一个里程碑事件。Thompson 和 Ritchie 决定用 C语言 重写 UNIX 系统的内核。
意义:在此之前,所有操作系统核心都是用汇编语言写的(为了速度)。用高级语言(C语言)写内核证明了 C语言既足够高效,又具备极强的可移植性。这使得 UNIX 能够轻松移植到各种不同的计算机硬件上,迅速在大学和科研机构中传播开来。
3. K&R C 时代(1978)
随着 UNIX 的传播,C语言也随之流行,但当时缺乏统一的标准,各地出现了各种“方言”。
《The C Programming Language》:1978年,Brian Kernighan 和 Dennis Ritchie 合著了这本著名的书(程序员圈内尊称为 K&R 或“白皮书”)。
事实标准:这本书中描述的 C语言版本成为了当时的“事实标准”,被称为 K&R C。直到今天,这本书依然是编程书籍中的圣经。
4. 标准化时代(ANSI C / ISO C)
为了避免分裂,C语言开始了漫长的标准化之路。
C89 / C90(ANSI C)
- 1983年,美国国家标准协会(ANSI)成立委员会制定 C语言标准。
- 1989年发布标准(ANSI X3.159-1989),被称为 C89。
- 1990年,国际标准化组织(ISO)采纳了该标准,被称为 C90。
- 特点:这是最经典、支持最广泛的版本。许多古老的工业设备和嵌入式系统至今仍强制要求使用 C89 标准。
C99(1999年)
- 新特性:引入了
// 单行注释(之前只有 /* */)、布尔类型(<stdbool.h>)、变长数组(VLA)、更灵活的变量声明位置等。
C11(2011年)
- 新特性:标准化了多线程支持(
<threads.h>)、原子操作、匿名结构体等,并剔除了一些 C99 中从未被广泛实现的特性。
C17(2018年)
- 主要是对 C11 进行缺陷修复(Bug Fix),没有引入重大新功能。
C语言家谱图
- BCPL(1967, Martin Richards)
- C语言(1972, Dennis Ritchie)
C语言的历史就是计算机从庞大的大型机走向小型机、微型机,再到如今万物互联的历史。
C语言的用途
C语言被广泛应用于以下领域:
这些领域有一个共同点:对性能和硬件控制有极高要求。
为什么这些领域选择C语言?
- 首先,C语言执行效率极高,仅次于汇编语言,能满足实时性和高并发需求;
- 其次,C语言可以直接操作内存和硬件,这是开发操作系统和嵌入式程序的必备能力;
- 第三,C语言没有运行时开销,不依赖虚拟机或垃圾回收,非常适合资源受限的环境;
- 最后,C语言可移植性强,几乎所有平台都有C编译器,代码可以跨平台编译运行。
这些特性使C语言在底层系统开发中至今无可替代。
注:本文是本账号作者撰写,AI仅用于校对整理。转载请注明出处及原作者。