早期的操作系统软件主要是用汇编语言(包括UNIX操作系统在内)编写的。由于汇编语言依赖于计算机硬件,所以程序的可读性和可移植性都比较差,所以呢,为了提高操作系统软件的可读性和可移植性,最好改用高级语言。但是呢,一些高级语言又难以实现汇编语言的某些功能(汇编语言可以直接对硬件进行操作,例如对内存地址的操作、位操作等)。所以人们希望找到一种兼顾一般高级语言和低级语言的优点的语言,于是,C语言就在这种情况下诞生了。

C语言是在B语言的基础上发展起来的,它的根源可以追溯到ALGOL60。

1960年出现的ALGOF60是一种面向问题的高级语言,它离硬件比较远,不宜用来编写系统程序。

1963年英国剑桥大学推出了CPL语言。CPL语言在ALGOL60的基础上接近硬件一些,但是规模比较大,难以实现。

1967年英国剑桥大学的Martin Richards对CPL语言做了简化,推出了BCPL语言。          1970年美国贝尔实验室的ç以BCPL 语言为基础,又进一步简化,设计出了很简单的而且很接近硬件的B语言(取BCPL的第一个字母)。

1971年在PDP 11/20上实现了B语言,并编写了UNIX操作系统,此时的B语言过于简单,功能有限。

1972年至1973间,贝尔实验室的D.M.Ritchie在B语言的基础上设计出了C语言(取BCPL的第二个字母)。C语言既保持了BCPL和B语言的优点(精炼,接近硬件),又克服了他们的缺点(过于简单,数据无类型等)。最初的C语言只是为了描述和实现UNIX操作系统提供一种工作语言而设计的。

1973年,Ken Thompson 和D.M.Ritchie合作把UNIX的90%以上用C语言改写(即UNIX的第5版。原来的UNIX操作系统是1969年由美国的贝尔实验室的Ken Thompson 和D.M.Ritchie开发成功的,是用汇编语言编写的)。

1975年UNIX第6版发布后,C语言的冲突优点才引起人们的普遍注意。

1977年出现了不依赖于具体机器的C语言编译文本《可移植C语言编译程序》,使C语言移植到其他机器时所需做的工作大大简化了,这也推动了UNIX操作系统迅速地在各种机器上实现。例如VAX、AT&T等计算机系统都相继开发了UNIX。随着UNIX的日益广泛使用,C语言也迅速得到了推广。

1978年以后,C语言先后移植到大、中、小、微型计算机上,已独立于UNIX和PDP了。以1978年发布的UNIX第七版中的C语言编译程序为基础,Brain W.Kernighhan和 Dennis M.Ritchie(合称K&R)合著了影响深远的名著《The C Programming Language》,这本书中介绍的C语言成为了后来广泛使用的C语言版本的基础,它成为事实上的C标准。

1983年,美国国家标准协会(ANSI)根据C语言问世以来各种版本对C语言进行了发展和扩充,公布了第一个C语言标准草案(83 ANSI C)。ANSI C比原来的C有了很大的发展。

K&R在1988年修改了他们的经典著作《The C Programming Language》,按照即将公布的ANSI C重新写了该书。

1989年,ANSI公布了一个完整的C语言标准-X3.159.1989,简称C89.   ANSI C现在被几乎所有广泛使用的编译器支持。现在多数C代码是在ANSI C基础上写的。

1990年,国际化标准组织iOS接受C89为IOS C的标准,通称C90. C90与C89基本相同。

1999年,IOS又修订了C语言标准,简称C99.

目前流行的C语言编译系统大多是以C89为基础进行开发的,并未实现C99所建议的所有功能。

美国国家标准学会

(ANSI)American National Standards Institute

国际标准化组织(ISO)

International Organization for Standardization

_杂谈_C语言历史的更多相关文章

  1. 『Python CoolBook』C扩展库_其五_C语言层面Python库之间调用API

    点击进入项目 一.C层面模块添加API 我们仍然操作如下结构体, #include <math.h> typedef struct Point { double x,y; } Point; ...

  2. _编程语言_C语言_C++_时间

    C++ 标准库没有提供日期类型,使用C预压的日期和事件操作. 使用时引入头文件  <ctime> . 四个和事件相关的函数: clock_t // 系统时间和日期表示为某种整数time_t ...

  3. 【书籍下载链接】_1_第一轮_C语言书籍

    各位朋友,如果您觉得下载的电子书,看的还可以,请购买纸质版的图书,如果您觉得 您下载的书,不值得一看请在下载后直接删除. Windows汇编:http://dl.vmall.com/c0jk1v970 ...

  4. 选择排序_C语言_数组

    选择排序_C语言_数组 #include <stdio.h> void select_sort(int *); int main(int argc, const char * argv[] ...

  5. 插入排序_C语言_数组

    插入排序_C语言_数组 #include <stdio.h> void insertSort(int *); int main(int argc, const char * argv[]) ...

  6. 快速排序_C语言_数组

    快速排序_C语言_数组 #include <stdio.h> void quickSort(int *, int, int); int searchPos(int *, int, int) ...

  7. 冒泡排序_C语言_数组

    冒泡排序_C语言_数组 #include <stdio.h> //冒泡排序 小->大 void sort(int * pArray, int len); int main(int a ...

  8. 为什么说JAVA中要慎重使用继承 C# 语言历史版本特性(C# 1.0到C# 8.0汇总) SQL Server事务 事务日志 SQL Server 锁详解 软件架构之 23种设计模式 Oracle与Sqlserver:Order by NULL值介绍 asp.net MVC漏油配置总结

    为什么说JAVA中要慎重使用继承   这篇文章的主题并非鼓励不使用继承,而是仅从使用继承带来的问题出发,讨论继承机制不太好的地方,从而在使用时慎重选择,避开可能遇到的坑. JAVA中使用到继承就会有两 ...

  9. C# 语言历史版本特性(C# 1.0到C# 7.1汇总更新) C#各版本新特性 C#版本和.NET版本以及VS版本的对应关系

    C# 语言历史版本特性(C# 1.0到C# 7.1汇总更新) 2017年08月06日 11:53:13 阅读数:6705 历史版本 C#作为微软2000年以后.NET平台开发的当家语言,发展至今具有1 ...

随机推荐

  1. pyton random 模块

    import random print(random.random())#(0,1)----float 大于0且小于1之间的小数 print(random.randint(1,3)) #[1,3] 大 ...

  2. js 箭头函数

    箭头函数 ES6标准新增了一种新的函数:Arrow Function(箭头函数). x => x * x相当于: function (x) { return x * x; }箭头函数相当于匿名函 ...

  3. Android.InstallDevelopmentEvn

    1. 如何搭建Android Application的开发环境 http://blog.csdn.net/yzhj2005/article/details/6980676 2. 在Mac OS X系统 ...

  4. python提取分析表格数据

    #/bin/python3.4# -*- coding: utf-8 -*- import xlrd def open_excel(file="file.xls"): try: d ...

  5. Windows MySQL5.7安装和配置

    http://www.leixuesong.cn/category/mysql MySQL5.7是MySQL是最新的MySQL大版本,也是官方认为目前性能最好的.MySQL5.7也有很多改动,很多新的 ...

  6. Date时间

    var date_obj= new Date(); alert(date_obj.toLocaleString()) //2017/12/26 上午1:10:54 var date_obj2= new ...

  7. [Robot Framework] Robot Framework怎么调试?

    Robot Framework怎么debug? 在eclipse里面安装一个插件,就可以debug robot framework的project. 插件下载地址: https://github.co ...

  8. [ES]ES查询指南

    我们通常用用_cat API检测集群是否健康. 确保9200端口号可用: curl 'localhost:9200/_cat/health?v' 绿色表示一切正常, 黄色表示所有的数据可用但是部分副本 ...

  9. 多种方式判断PC端,IOS端,移动端

    1. 通过判断浏览器的userAgent,用正则来判断手机是否是IOS(苹果)和Android(安卓)客户端. var u = navigator.userAgent; var isAndroid = ...

  10. OpenSSH配置与基本使用

    SSH访问远程 SSH常见分类: telnet-远程登录协议,23/TCP 明文认证.明文传输(不安全) ssh(Secure SHell)-应用层协议,22/TCP 通讯和认证过程加密.主机认证 用 ...