早期的操作系统软件主要是用汇编语言(包括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. c#特性attribute:

    特性是被编译到metadata中,  是提供给反射用的. 特性attribute:1 什么是attribute,和注释有什么区别 2 声明和使用attribute3 使用attribute完成扩展4 ...

  2. Kali Linux 网络扫描秘籍

    第三章 端口扫描(二) 作者:Justin Hutchens 译者:飞龙 协议:CC BY-NC-SA 4.0 3.6 Scapy 隐秘扫描 执行 TCP 端口扫描的一种方式就是执行一部分.目标端口上 ...

  3. What is MaxiSys Pro MS908P Software Advantage

    The Autel Maxisys Pro Diagnostic Platform is an evolutionary smart solution for specialized automoti ...

  4. git的命令详解

    # git三个区 + 工作区: 写代码的地方 + 暂存区: 暂时存储代码 + 仓库区: 代码提交到了仓库区,就生成一条历史记录(版本) 工作区===> 暂存区 ===> 仓库区 # git ...

  5. Luogu 3421 [POI2005]SKO-Knights - Exgcd

    Description 给出一个骑士的 $N$种 中行走的方式 $(a_i, b_i)$, 可以使骑士的坐标$(-a,-b)$或$(+a,+b)$. 我们需要找出 第二个骑士的 两种行走方式 $(c_ ...

  6. ES6 中 let and const

    let 和 const 命令 let 命令 基本用法 ES6 新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. { let a = 10; v ...

  7. ui设计学习路线图分享送给初学者

    本文来源:千锋UI设计 Ui设计师就业市场前景及薪资很可观,而且现在市场上对于ui设计师的人才需求也很大,所以,现在越来越多的人看好这一行业,纷纷投入到ui设计的学习中来,那么想新手想要学好ui设计, ...

  8. insert执行错误,怎么样获取具体的错误原因

    1.开启debug 2.去runtime里面去找最后执行的SQL

  9. UML 类图几种关系的总结(图文并茂、案例详解)

    听语音 | 浏览:2831 | 更新:2017-03-01 13:06 1 2 3 4 5 6 7 分步阅读 在UML类图中,常见的有以下几种关系: 泛化(Generalization),  实现(R ...

  10. Maximum Average Subarray I LT643

    Given an array consisting of n integers, find the contiguous subarray of given length k that has the ...