C 和 C 是编写大量代码的标志性语言。他们经历了什么道路才成为一体?本文介绍了 C 的出现及其正式标准化的开始。此外,您还将了解 C with Classes 及其最终转变为 C 。
1969 — 1973 C诞生于世
1969。阿波罗 11 号访问月球。 AT&T 贝尔实验室开发了一种我们今天熟知的 C 语言。此时,Unix 操作系统正处于早期开发阶段。
事实上,C 语言继承了 B 语言的主要功能。以及它名字的由来。至于Unix,最初是用汇编语言实现的,甚至没有高级语言的编译器。该项目的开发归因于C语言创建的原因之一。
1971 年,C 语言的编译器和一些实用程序被包含在 Unix 的第二个版本中。 1973 年,Unix 内核主要是用 C 编写的。
1978. 这本书成为第一个规范
Dennis Ritchie 和 Brian Kernighan 于 1978 年 2 月 22 日出版了第一版《C 编程语言》。这本书是第一本广泛使用的 C 语言材料。
图N1 - 《C 编程语言》第一版的封面
从发布到第一个官方语言认证,它已经成为 C 开发的标准。该“标准”被称为 K&R——以作者姓氏的第一个字母命名。
本书介绍了“Hello World”程序作为最小工作程序的示例。 1978 年之后,几乎所有有关编程语言的书籍都离不开这个代码示例。如今,将“Hello World”作为您的第一个程序显示已成为一项既定的传统。
#include <stdio.h> main() { printf("Hello, World\n"); } </stdio.h>
K&R 展示了多种语言特性。例如,结构体 - 一组多个变量分组在一个名称下以便于引用,以及 long int 和 unsigned int 数据类型。
带赋值的加法/减法运算符在 K&R C 中也发生了变化。以前,要将值加一,必须编写 a = 1,但此类运算符会让 C 编译器感到困惑。此外,从人类的角度来看,a = 1(加一)和a = 1(赋值)之间的差异看起来相当脆弱。正是在K&R C,这些算子变成了我们熟悉的算子——a = 1.
书中的代码示例采用统一的风格设计,也以创建者姓氏的首字母命名。 K&R 风格以使用八个空格作为主要缩进而闻名(尽管更常用的是四个空格)。它也被称为“内核风格”,因为 Unix 内核就是用这种风格编写的。
#include <stdio.h> main() { printf("Hello, World\n"); } </stdio.h>
1979. C 与类
1979 年 5 月,贝尔实验室员工 Bjarne Stroustrup 开始开发一个系统,该系统将成为第一个 Unix 集群。换句话说,他开始创建一个分布式计算系统,连接到由多台计算机组成的公共网络。
问题是缺乏合适的工具包。在现有的编程语言中,有两种选择可以帮助解决这个问题,但两者都有细微差别。 BCPL 语言速度很快,但不适合大型项目,因为它非常接近低级语言。另一方面,面向对象的编程语言 Simula 适合这项任务,但速度相当慢。因此 Stroustrup 开始实现他自己的基于 C 的语言。
早在 1979 年 10 月,向 C 添加类的 CPRE 预处理器就准备好了。这种语言被称为 C with Classes。人们可以编写程序代码并将其传递给预处理器。然而,它仍然被认为是 C 的扩展。
除了类之外,带有类的 C 的第一个版本还包括:
- 派生类,但还没有虚函数;
- 访问控制;
- 构造函数和析构函数;
- 朋友班;
- 函数参数类型的控制和转换。
1983.ANSI C
该语言越来越受欢迎:
- C 开始取代 Basic 成为微型计算机编程的主导语言;
- 新的编译器出现了。更重要的是,它们是由没有直接参与语言开发的人编写的。
但即使有这样的人气,C也只有K&R的不言而喻的水准。编译器的开发人员对该语言引入了许多非标准的更改。这就是代码可移植性问题开始升温的时候。鉴于这一系列问题,第一个 C 标准开始出现。
1983年,美国国家标准协会(ANSI)成立了一个委员会来起草该规范。标准化进程直到 1989 年才结束,当时该语言的第一个标准被批准为“ANSI X3.159-1989:编程语言 C”。同年,《C 编程语言》一书的第二版出版,描述了标准中出现的语言。一年的时间里,该标准经过微小修改就获得了国际标准化组织(ISO)的批准。
图N2 - 《C 编程语言》第二版的封面
除了自 K&R 以来语言发生的一些变化之外,该标准还包括全新的功能,例如函数原型和更复杂的预处理器。该标准还包括对标准库组成的描述。此外,一些之前没有定义的手段被给出了更精确的定义。
1983.C 与课程C
1982 年,Bjarne Stroustrup 开始致力于改变 C with Classes 的状态,其创建者称之为“中等成功”。从那时起,开发编译器花了一年的时间。 Cfront 于 1983 年问世。
它的主要功能是将带有类的 C 语言转换为 C 代码。之后,转换后的代码被传递给C编译器。此功能使更多人能够使用该编译器,以及在现有的 Unix 基础设施上使用它。
随着语言的发展,它的名称发生了多次变化。它最初被称为 C84,因为社区简称它为 C。然而,这个名称也具有误导性,因为它更像是一个新的 C 标准,而不是该语言的子集。而这实际上并没有帮助解决以前名字的问题。最终该语言被称为 C ,即 C 和增量运算符。
从带有类的 C 迁移到 C 时,该语言中出现了其他新功能:
- 虚函数;
- 函数名和运算符重载;
- 参考文献;
- 常量;
- 改进的类型检查;
- 用户控制的自由存储内存控制。
至今仍在使用的注释风格在语言发展的这个阶段扎根。该样式也用于其他语言。
这就是C在没有正式认证之前的生活。 Stroustrup 相当迅速地响应了程序员社区的请求。他正在出版代表该语言标准描述的作品。所以,该语言得以维持主要归功于其创建者的努力。
1985 年。“C 编程语言”。
1985 年 2 月,C 的第一个可发行版本发布。同年 10 月,语言创始人 Bjarne Stroustrup 发布了第一版《C 编程语言》一书。
图N3 - 《C 编程语言》第一版的封面
它就像 Kernighan 和 Ritchey 的书《C 编程语言》一样成为 C 语言的第一个默认标准。直到第一个官方标准。
在书中,Stroustrup 从 C 角度涵盖了语言特性和设计问题,并用大量代码示例为每一点增添了趣味。
此后,这本书又重印了三次,每次都有语言更新。在撰写本文时,最新的第 4 版包含 C 11 标准。
1989.C 2.0
1989年7月,Cfront 2.0编译器发布。它与之前的版本相比有了很大的修改,也给C语言带来了新意。
此时,模板已经成为热门话题。没有人怀疑它们会得到实施,因为这是一个现实的目标。至于另一个潜在的突出特性——多重继承——对编程社区的创建者来说是一个真正的挑战。许多人说在 C 中实现多重继承是不可能的。例如,在 Simula 中,由于垃圾收集器不可避免的复杂性,类似的建议被拒绝。然而,多重继承是非常需要的,因为它会大大简化库的开发,如果没有多重继承,库的代码会变得相当麻烦。
所以,Cfront 2.0 终究还是加入了多重继承。这种语言的添加引发了争议。例如,有些人认为,面向对象编程的缩影 Smalltalk 语言不具有多重继承。这就是为什么C当然不应该采用它。语言的创造者认为这种反应是由于过于重视多重继承而造成的。
上面的C版本还介绍了:
- 指向成员的指针,允许创建指向非静态字段和函数的指针;
- 静态和const成员函数;
- 访问修饰符受保护;
- 类型安全链接;
- 抽象类;
- 新建和删除特定于类;
1990. 博兰C
1990 年,Borland 发布了 Borland C 集成开发环境,用于开发 C 和 C 程序(真是一个转折,哈?)。它最初是为了在 DOS 下开发,但后来也引入了 Windows 支持。
图 N4 - Borland C 的屏幕截图
从历史上看,Borland C 是 Turbo C 的后代,但融合了 C 的特点——支持面向对象编程。
每个版本的环境都有自己的编译器支持自己的标准。随着时间的推移,Borland C 获得了许多用于快速应用程序开发的专用库。
Borland C IDE 的最后一个版本于 1997 年发布,之后被 Borland C Builder 系列所取代。 Borland C 的终结是在 2000 年,随着带有编译器的 Borland C 5.5 的发布。
Borland C 是一个非常舒适的 DOS 编辑器。甚至还有某种语法着色。
PVS-Studio分析器C和C核心架构师Yuri Minaev
Borland 四年后,微软发布了 Visual C 集成开发环境。
1990. C 语言的模板和异常处理机制
1986 年,Bjarne Stroustrup 写了一篇文章《什么是面向对象编程?》其中他指出了 C 的三个缺陷:
- 缺乏对参数化类型的支持;
- 缺乏标准的异常处理机制;
- 缺乏多重继承。
多重继承于 1989 年随 C 2.0 引入,其余缺陷于 1990 年通过新的语言功能得到修复。 Stroustrup 在《Annotated C Reference Manual》一书中对它们进行了描述。
模板和异常处理很快就相继出现。模板于 7 月在西雅图获得批准,异常处理机制于 11 月在帕洛阿尔托获得批准。它们的发布之所以接近,是因为这两项创新都解决了类似的问题。根据语言创建者本人的说法,模板允许您通过扩展静态类型系统的功能来减少程序执行期间的错误数量。而异常允许您处理剩余的错误。
参数化类型早在 C 的第一版中就被考虑过。然而,由于缺乏时间对设计和实施问题进行充分研究,它们不得不推迟。出于同样的原因,例外情况也被推迟。这并不是毫无意义的。他们的设计从1984年持续到1989年。
《带注释的 C 参考手册》还介绍了命名空间以及运行时识别类型的能力。
通用编程从那时开始获得动力。使用模板的 C 并不是先驱。在创建模板时,创建者从 ML、CLU 和 Ada 编程语言中汲取灵感。
但是,可以肯定地说,C 语言正在推广这种范式。在许多情况下,模板使得无需宏即可编写代码成为可能,从而减少了搬起石头砸自己脚的机会。美中不足的是,只有 C 20 才出现了简化泛型编程工作的完整操作功能。但即便如此,当程序员了解到模板可以在编译阶段启用计算时,他们并没有停下来......
另一方面,C 中的异常并不是那么明确。不幸的是,与早期的方法相比,他们并没有解决所有的错误处理问题。使用异常时,控制流变得非常重要。有很多方法会搬起石头砸自己的脚,比如私有继承异常、按值捕获异常、或者以错误的顺序排列 catch 块等。因此,一些编码标准禁止使用它们,例如 Google C 代码风格。
Philipp Khandelyants,PVS-Studio C 和 C 开发团队的团队负责人
《带注释的 C 参考手册》在某种程度上已成为官方 C 标准化的先驱。它描述了所有很快将成为该语言标准的创新。
在下一个系列中...
在这篇文章中,我们介绍了从 1969 年到 1990 年 C 和 C 的历史事件。在下一篇文章中,我们将深入研究从 1991 年到现在的 C 历史:
- Bjarne Stroustrup 关于 C 语言如何创建的书;
- C 98是第一个官方标准;
- C99—C 继续前进;
- 技术报告1——纸上的新C特性;
- Viva64 版本,稍后 — PVS-Studio;
- C 记录已取得的成就(C99、C11),C 获得动力(C 11、C 17);
- C 20 和 C 23。
以上是C 和 C 的历史。第一部分:C语言的产生和标准化。带类的 C 变为 C的详细内容。更多信息请关注PHP中文网其他相关文章!

C#和C 的主要区别在于内存管理、多态性实现和性能优化。1)C#使用垃圾回收器自动管理内存,C 则需要手动管理。2)C#通过接口和虚方法实现多态性,C 使用虚函数和纯虚函数。3)C#的性能优化依赖于结构体和并行编程,C 则通过内联函数和多线程实现。

C 中解析XML数据可以使用DOM和SAX方法。1)DOM解析将XML加载到内存,适合小文件,但可能占用大量内存。2)SAX解析基于事件驱动,适用于大文件,但无法随机访问。选择合适的方法并优化代码可提高效率。

C 在游戏开发、嵌入式系统、金融交易和科学计算等领域中的应用广泛,原因在于其高性能和灵活性。1)在游戏开发中,C 用于高效图形渲染和实时计算。2)嵌入式系统中,C 的内存管理和硬件控制能力使其成为首选。3)金融交易领域,C 的高性能满足实时计算需求。4)科学计算中,C 的高效算法实现和数据处理能力得到充分体现。

C 没有死,反而在许多关键领域蓬勃发展:1)游戏开发,2)系统编程,3)高性能计算,4)浏览器和网络应用,C 依然是主流选择,展现了其强大的生命力和应用场景。

C#和C 的主要区别在于语法、内存管理和性能:1)C#语法现代,支持lambda和LINQ,C 保留C特性并支持模板。2)C#自动内存管理,C 需要手动管理。3)C 性能优于C#,但C#性能也在优化中。

在C 中处理XML数据可以使用TinyXML、Pugixml或libxml2库。1)解析XML文件:使用DOM或SAX方法,DOM适合小文件,SAX适合大文件。2)生成XML文件:将数据结构转换为XML格式并写入文件。通过这些步骤,可以有效地管理和操作XML数据。

在C 中处理XML数据结构可以使用TinyXML或pugixml库。1)使用pugixml库解析和生成XML文件。2)处理复杂的嵌套XML元素,如书籍信息。3)优化XML处理代码,建议使用高效库和流式解析。通过这些步骤,可以高效处理XML数据。

C 在性能优化方面仍然占据主导地位,因为其低级内存管理和高效执行能力使其在游戏开发、金融交易系统和嵌入式系统中不可或缺。具体表现为:1)在游戏开发中,C 的低级内存管理和高效执行能力使得它成为游戏引擎开发的首选语言;2)在金融交易系统中,C 的性能优势确保了极低的延迟和高吞吐量;3)在嵌入式系统中,C 的低级内存管理和高效执行能力使得它在资源有限的环境中非常受欢迎。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

SublimeText3汉化版
中文版,非常好用

Dreamweaver Mac版
视觉化网页开发工具

禅工作室 13.0.1
功能强大的PHP集成开发环境