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 在现代编程中仍然具有重要相关性。1)高性能和硬件直接操作能力使其在游戏开发、嵌入式系统和高性能计算等领域占据首选地位。2)丰富的编程范式和现代特性如智能指针和模板编程增强了其灵活性和效率,尽管学习曲线陡峭,但其强大功能使其在今天的编程生态中依然重要。

C 学习者和开发者可以从StackOverflow、Reddit的r/cpp社区、Coursera和edX的课程、GitHub上的开源项目、专业咨询服务以及CppCon等会议中获得资源和支持。1.StackOverflow提供技术问题的解答;2.Reddit的r/cpp社区分享最新资讯;3.Coursera和edX提供正式的C 课程;4.GitHub上的开源项目如LLVM和Boost提升技能;5.专业咨询服务如JetBrains和Perforce提供技术支持;6.CppCon等会议有助于职业

C#适合需要高开发效率和跨平台支持的项目,而C 适用于需要高性能和底层控制的应用。1)C#简化开发,提供垃圾回收和丰富类库,适合企业级应用。2)C 允许直接内存操作,适用于游戏开发和高性能计算。

C 持续使用的理由包括其高性能、广泛应用和不断演进的特性。1)高效性能:通过直接操作内存和硬件,C 在系统编程和高性能计算中表现出色。2)广泛应用:在游戏开发、嵌入式系统等领域大放异彩。3)不断演进:自1983年发布以来,C 持续增加新特性,保持其竞争力。

C 和XML的未来发展趋势分别为:1)C 将通过C 20和C 23标准引入模块、概念和协程等新特性,提升编程效率和安全性;2)XML将继续在数据交换和配置文件中占据重要地位,但会面临JSON和YAML的挑战,并朝着更简洁和易解析的方向发展,如XMLSchema1.1和XPath3.1的改进。

现代C 设计模式利用C 11及以后的新特性实现,帮助构建更灵活、高效的软件。1)使用lambda表达式和std::function简化观察者模式。2)通过移动语义和完美转发优化性能。3)智能指针确保类型安全和资源管理。

C 多线程和并发编程的核心概念包括线程的创建与管理、同步与互斥、条件变量、线程池、异步编程、常见错误与调试技巧以及性能优化与最佳实践。1)创建线程使用std::thread类,示例展示了如何创建并等待线程完成。2)同步与互斥使用std::mutex和std::lock_guard保护共享资源,避免数据竞争。3)条件变量通过std::condition_variable实现线程间的通信和同步。4)线程池示例展示了如何使用ThreadPool类并行处理任务,提高效率。5)异步编程使用std::as

C 的内存管理、指针和模板是核心特性。1.内存管理通过new和delete手动分配和释放内存,需注意堆和栈的区别。2.指针允许直接操作内存地址,使用需谨慎,智能指针可简化管理。3.模板实现泛型编程,提高代码重用性和灵活性,需理解类型推导和特化。


热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

Dreamweaver CS6
视觉化网页开发工具

WebStorm Mac版
好用的JavaScript开发工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

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