C语言的发展史

一.C语言是什么?

1.C语言之父

   丹尼斯·麦卡利斯泰尔·里奇(英语:Dennis MacAlistair Ritchie,1941年9月9日-2011年10月12日),美国计算机科学家。黑客圈子通常称他为“dmr”。他是C语言的创造者、Unix操作系统的关键开发者,对计算机领域产生了深远影响,并与肯·汤普逊同为1983年图灵奖得主。

   麻省理工大学计算机系的马丁教授评价说:“如果说,乔布斯是可视化产品中的国王,那么里奇就是不可见王国中的君主。乔布斯的贡献在于,他如此了解用户的需求和渴求,以至于创造出了让当代人乐不思蜀的科技产品。然而,却是里奇先生为这些产品提供了最核心的部件,人们看不到这些部件,却每天都在使用着。”克尼汉评价道:牛顿说他是站在巨人的肩膀上,如今,我们都站在里奇的肩膀上。

2.C语言的发展史

    从图中时间线,可以明显的看出C语言的起源以及时间节点。有时候不得不说时势造英雄,在1969~1971年之间著名的操作系统Unix从肯.汤普逊手中诞生,作为一种大型的系统性软件来说,极其需要一种可靠的高级语言的出现(当时的低级语言指的是汇编,因为之前的操作系统是用汇编写的)。这个时候的丹尼斯.里奇也没闲着,在对B语言改良之后,就诞生了带有类型的C语言(据里奇自己说,有一段时间称这种改良的语言为NB。即:new B

3.C语言编译器的诞生

    不知道你有没有想过,大家都用C语言或基于C语言的语言来写编译器,那么世界上第一个C语言编译器又是怎么编写的呢?这不是一个“鸡和蛋”的问题……

   回顾一下C语言历史:Tomphson在BCPL的基础上开发了B语言,Ritchie又在B语言的基础上成功开发出了现在的C语言。在C语言被用作系统编程语言之前,Tomphson也用过B语言编写过操作系统。可见在C语言实现以前,B语言已经可以投入实用了。因此第一个C语言编译器的原型完全可能是用B语言或者混合B语言与PDP汇编语言编写的。

    我们现在都知道,B语言的执行效率比较低,但是如果全部用汇编语言来编写,不仅开发周期长、维护难度大,更可怕的是失去了高级程序设计语言必需的移植性。

   所以早期的C语言编译器就采取了一个取巧的办法:先用汇编语言编写一个C语言的一个子集的编译器,再通过这个子集去递推,进而完成完整的C语言编译器。详细的过程如下: 先创造一个只有C语言最基本功能的子集,记作C0语言,C0语言已经足够简单了,可以直接用汇编语言编写出C0的编译器。依靠C0已有的功能,设计比C0复杂,但仍然不完整的C语言的又一个子集C1语言,其中C0属于C1,C1属于C,用C0开发出C1语言的编译器。在C1的基础上设计C语言的又一个子集C2语言,C2语言比C1复杂,但是仍然不是完整的C语言,开发出C2语言的编译器 …… 如此直到CN,CN已经足够强大了,这时候就足够开发出完整的C语言编译器的实现了。至于这里的N是多少,这取决于你的目标语言(这里是C语言)的复杂程度和程序员的编程能力。简单地说,如果到了某个子集阶段,可以很方便地利用现有功能实现C语言时,那么你就找到N了。下面的图说明了这个抽象过程:

  而这个过程也在Unix V2版本中找到了证据。

        

    肯恩·汤普森,丹尼斯·里奇和其他人在贝尔实验室为PDP-11开发了Unix的第二版。它通过更多的系统调用和更多的命令扩展了第一版。此版本还看到了C语言的开始,该语言用于编写一些命令。

4.标准C库及代码

   C语言及其标准经过若干次迭代之后,就成了今天大家看到的样子。其标准中指定了很多C标准库,而不同的系统都有自己不同的代码实现。

   ANSI C共包括15个头文件。 1995年,Normative Addendum 1(NA1)批准了3个头文件(iso646.h、wchar.h和wctype.h)增加到C标准函数库中。 C99标准增加6个头文件(complex.h、fenv.h、inttypes.h、stdbool.h、stdint.h和tgmath.h)。 C11标准中又新增了5个头文件(stdalign.h、stdatomic.h、stdnoreturn.h、threads.h和uchar.h)。

至此,C标准函数库共有29个头文件:

名字源自描述
<errno.h>用来测试由库函数报的错误代码
<ctype.h>用来根据类型来给字符分类,或者进行大小写转换
<assert.h>断言宏,用来调试
<complex.h>C99一组操作复数的函数
<fenv.h>C99定义了一组用来控制浮点数环境的函数
<float.h>用于浮点数库特定实现的宏常量
<inttypes.h>C99定义精确的宽度整数类型
<iso646.h>NA1定义几个等效于C中某些运算符的宏
<limits.h>定义了用于整数库特定实现属性的宏常量
<locale.h>定义C语言本地化函数
<math.h>定义C语言数学函数
<setjmp.h>定义了宏setjmp和longjmp,在非局部条转的时候使用
<signal.h>定义C语言信号处理函数
<stdalign.h>C11用于查询和指定对象的数据结构对齐方式
<stdarg.h>用于查询和指定对象的数据结构对齐方式
<stdatomic.h>C11用于查询和指定对象的数据结构对齐方式
<stdbool.h>C99定义布尔数据类型
<stddef.h>定义了几个常见的类型和宏
<stdint.h>C99定义精确的宽度整数类型
<stdio.h>定义标准输入/标准输出函数
<stdlib.h>

数值转换函数、伪随机数生成函数、

动态内存分配函数、过程控制函数

<stdnoreturn.h>C11C11中的一个宏,用于声明函数不会返回控制
<string.h>定义C语言字符串处理函数
<tgmath.h>C99定义了泛型宏
<threads.h>C11关于线程的
<time.h>关于时间处理的
<uchar.h>C11关于字符处理的
<wchar.h>NA1关于字符处理的
<wctype.h>NA1关于字符处理

5.C语言的应用领域

C语言是一种高效、通用的编程语言,可以应用于许多不同领域。以下是C语言常见的应用场景:

   1. 系统编程:C语言被广泛应用于操作系统和设备驱动程序的编写。由于C语言的高效性、低层次的控制能力和对底层硬件的支持,它被视为系统编程的首选语言。

   2. 嵌入式系统:C语言也非常适合嵌入式系统的开发。由于C语言的内存管理和控制能力,它可以帮助嵌入式设备实现高效的性能和资源利用。同时,与其他高级编程语言相比,使用C语言编写的程序运行速度更快。

   3. 数据库:C语言更适合开发数据库管理系统,如MySQL和PostgreSQL。因为这些系统需要处理大量的数据,在这种情况下,使用C语言进行优化会提高性能并降低程序的内存占用。

   4. 游戏开发:C语言也是游戏开发中最流行的编程语言之一。由于C语言的高效性和对底层硬件的控制能力,它可以帮助游戏开发人员实现高质量的图形和音频效果。同时,许多著名的游戏引擎,如Unreal Engine和Unity3D,都使用C语言作为其核心编程语言。

   5. 编译器开发:由于C语言自身也是一种编译语言,因此它非常适合用于编写编译器。许多流行的编译器,如GCC和LLVM,都是使用C语言编写的。

   6. 网络编程:C语言也被广泛用于网络编程。由于C语言可以轻松地调用操作系统提供的网络API,因此它可以帮助开发人员实现高性能的网络应用程序,如Web服务器和数据库连接池。

C语言应用很广泛,如图:

至此,本文也就结束了.文章如有描述有误,欢迎各位大佬评论.

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值