C语言的历史[编辑]

维基百科,自由的百科全书

(重定向自C2x)

跳到导航跳到搜索

本文记述了C语言自19世纪70年代至今的历史及发展。

目录

  • 1早期发展
  • 2K&R C
  • 3ANSI C 和 ISO C
  • 4C99
  • 5C11
  • 6C18
  • 7C2x
  • 8参考资料

早期发展[编辑]

肯·汤普逊和丹尼斯·里奇,是C编程语言的开发者.

C语言最早由丹尼斯·里奇(Dennis Ritchie)为了在PDP-11电脑上运行的Unix系统所设计出来的编程语言,第一次发展在1969年到1973年之间。

C源于BCPL语言,后者由马丁·理察德(Martin Richards)于1967年左右设计实现。BCPL是一门"无类型"的编程语言:它仅能操作一种数据类型,即机器字(machine word)。1970年,肯·汤普逊为运行在PDP-7上的首个Unix系统设计了一个精简版的BCPL,这个语言被称为B语言,它也是无类型的。

Unix最早运行在PDP-7上,是以汇编语言写成。在PDP-11出现后,丹尼斯·里奇与肯·汤普逊着手将Unix移植到PDP-11上,无类型的语言在PDP-11上愈发显得不合适。PDP-11提供了多种不同规格大小的基本对象:一字节长的字符,两字节长的整型数以及四字节长的浮点数。B语言无法处理这些不同规格大小的对象,也没有提供单独的操作符去操作它们。

C语言最初尝试通过向B语言中增加数据类型的想法来处理那些不同类型的数据。和大多数语言一样,在C中,每个对象都有一个类型以及一个值;类型决定了可用于值的操作的含义,以及对象占用的存储空间大小。

1973年,Unix操作系统的核心正式用C语言改写,这是C语言第一次应用在操作系统的核心编写上。

1975年C语言开始移植到其他机器上使用。史蒂芬·强生实现了一套“可移植编译器”,这套编译器修改起来相对容易,并且可以为不同的机器生成代码。从那时起,C在大多数计算机上被使用,从最小的微型计算机到与CRAY-2超级计算机。C语言很规范,即使没有一份正式的标准,你也可以写出C程序,这些程序无须修改就可以运行在任何支持C语言和最小运行时环境的计算机上。

C最初在小型机器上实现,并且继承了一系列小语种编程语言的特点;与功能相比,C的设计者更倾向于简单和优雅。此外,从一开始,C语言就是为系统级编程而设计,程序的运行效率至关重要,因此,C语言与真实机器能力的良好匹配也就不足为奇。例如,C语言为典型硬件所直接支持的对象:字符,整数(也许有多种大小),以及浮点数(同样可能有多种大小)提供了相应的基本数据类型。[1]

K&R C[编辑]

《C程序设计语言》第一版封面

1978年,丹尼斯·里奇和布莱恩·柯林汉合作出版了《C程序设计语言》的第一版。书中介绍的C语言标准也被C语言程序员称作“K&R C”(柯里C),第二版的书中也包含了一些ANSI C的标准。

K&R C主要引入了以下语言特性:

  • 标准I/O库
  • 结构(struct)类型
  • 长整数(long int)类型
  • 无符号整数(unsigned int)类型
  • 把运算符=+=-改为+=-=。因为=+=-会使得编译器不知道用户要处理i = -10还是i =- 10,使得处理上产生混淆。

即使在后来ANSI C标准被提出的许多年后,K&R C仍然是许多编译器的最低标准要求,许多老旧的编译仍然运行K&R C的标准。[2]

ANSI C 和 ISO C[编辑]

主条目:ANSI C

1989年,C语言被美国国家标准协会(ANSI)标准化,编号为ANSI X3.159-1989。这个版本又称为C89。标准化的一个目的是扩展K&R C,增加了一些新特性。

  • void 函数
  • 函数可以返回 struct 或 union 类型
  • void * 数据类型

1990年,国际标准化组织(ISO)成立 ISO/IEC JTC1/SC22/WG14 工作组,来规定国际标准的C语言,通过对ANSI标准的少量修改,最终制定了 ISO 9899:1990,又称为C90。随后,ANSI亦接受国际标准C,并不再发展新的C标准。[3]

K&R C语言到ANSI/ISO标准C语言的改进包括:

  • 增加了真正的标准库
  • 新的预处理命令与特性
  • 函数原型允许在函数申明中指定参数类型
  • 一些新的关键字,包括 const、volatile 与 signed
  • 宽字符、宽字符串与多字节字符
  • 对约定规则、声明和类型检查的许多小改动与澄清

WG14工作小组之后又于1994年,对1985年颁布的标准做了两处技术修订(缺陷修复)和一个补充(扩展)。下面是 1994 年做出的所有修改:

  • 3 个新的标准库头文件 iso646.h、wctype.h 和 wchar.h
  • 几个新的记号与预定义宏,用于对国际化提供更好的支持
  • printf/sprintf 函数一系列新的格式代码
  • 大量的函数和一些类型与常量,用于多字节字符和宽字节字符[4]

C99[编辑]

主条目:C99

在ANSI的标准确立后,C语言的规范在一段时间内没有大的变动,然而C++在自己的标准化创建过程中继续发展壮大。《标准修正案一》在1994年为C语言创建了一个新标准,但是只修正了一些C89标准中的细节和增加更多更广的国际字符集支持。不过,这个标准引出了1999年ISO 9899:1999的发表。它通常被称为C99。C99被ANSI于2000年3月采用。

C11[编辑]

主条目:C11

2011年12月8日,ISO正式发布了新的C语言的新标准C11(之前被称为C1X),官方名称为ISO/IEC 9899:2011。新的标准提高了对C++的兼容性,并增加了一些新的特性。这些新特性包括泛型、多线程、带边界检查的函数、匿名结构等[5]。

C18[编辑]

主条目:C18 (C语言标准)

C18没有引入新的语言特性,只对C11进行了补充和修正[6]。

C2x[编辑]

C2x引入了一些新特性。目前可以确定的是,C2x标准将加入符合IEEE标准的十进制浮点数,这使得计算机能够精确地储存浮点数[7]。

参考资料[编辑]

  1. ^ Stephen Prata. C Primer Plus(第5版). 北京: 人民邮电出版社. 2005年2月: 3–4. ISBN 9787115130228 (中文).
  2. ^ Dennis M. Ritchie,Brian W. Kernighan. C程序设计语言. 北京: 机械工业出版社. 2004年1月. ISBN 9787111128069 (中文).
  3. ^ Stephen Prata. C Primer Plus(第5版). 北京: 人民邮电出版社. 2005年2月: 12. ISBN 9787115130228 (中文).
  4. ^ JTC1/SC22/WG14 - C. [2020-06-10]. (原始内容存档于2020-06-13).
  5. ^ ISO/IEC 9899:2011 (PDF). [2020-06-10]. (原始内容存档 (PDF)于2018-03-29).
  6. ^ ISO/IEC 9899:2018 (PDF). [2020-06-10]. (原始内容存档 (PDF)于2020-07-22).
  7. ^ ISO/IEC 9899:202x (PDF). [2020-06-10]. (原始内容存档 (PDF)于2020-06-10).
[隐藏]

C语言

 
  • 《C程序设计语言》(K&R C)
  • 历史
  • ANSI C
  • C99
  • C11
  • C18
  • 嵌入式C语言
  • MISRA C
 
特性
  • Functions
  • 头文件
  • 字符串
  • Syntax
  • Preprocessor
  • 数据类型
 
  • glibc
  • C标准程序库
  • C POSIX library
  • Dietlibc
  • uClibc
  • Newlib
  • EGLIBC
  • Bionic
  • klibc
  • musl
 
编译器
  • Clang
  • GCC
  • Microsoft MSC编译器
  • Intel C++编译器
  • Borland Turbo C
  • LCC
  • Pelles C
  • PCC
  • TCC
  • C++/CLI
  • C++/CX
  • Watcom C/C++ compiler
 
C与其他的编程语言
  • C与C++

    • 兼容性
    • 运算符
  • Pascal与C的比较
  • C to Java byte-code compiler
 
派生的编程语言
  • C++
  • C♯
  • Objective-C
  • D语言
  • Alef
  • Limbo
  • Go
  • Vala
 
  • C/C++的集成开发环境
  • 分类

分类:

  • C语言

2020-11-17 C语言的历史相关推荐

  1. 【转】2020/11/17 15:00 网易有道Java实习 一面面经

    2020/11/17 15:00 网易有道Java实习 一面面经如下: 作者:要拿offer丶mata川 链接:https://www.nowcoder.com/discuss/566775?chan ...

  2. 2020.11.17【读书笔记】丨测序前送样准备取样要求

    制备环节的注意事项 微生物样本取样安全性 注意安全 样本准备与保存方法 植物组织 DNA含量:叶片>花.茎.果实>根.种子 尽量选择新鲜.幼嫩的叶片组织 采集流程 动物组织 DNA 新鲜组 ...

  3. 2020.11.17【读书笔记】丨ONT 测序平台送样指导——DNA 取样要求

    送样原则 安全 1. 人身安全:现有实验条件下(采取一定防护后),样品对实验人员本身无伤害: 2. 环境安全:样品对室内.室外环境无影响(以免因为不小心导致一些活体样本进入外界环境造成不良影响): 无 ...

  4. 一本深入探讨C++11~C++17最新语言特性的书推荐给你

    近10年来C++的更新可谓是非常频繁,这让我在2017年时感受到了一丝不安.那个时候我发现在开源平台上已经有很多项目采用C++11和C++14标准编写,其中不乏一些知名的代码库,而公司里所用的编译环境 ...

  5. 2020年 第11届 蓝桥杯 Java B组 省赛真题详解及小结【第2场省赛 2020.10.17】

    蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 说明:大部分题解思路及程序代码 源自 蓝桥杯 官网视频(Java B组历年真题解析) -- 郑未老师. ...

  6. QIIME 2教程. 17鉴定和过滤嵌合体q2-vsearch(2020.11)

    文章目录 鉴定和过滤嵌合体序列`q2-vsearch` 数据下载 无参嵌合体鉴定 可视化统计结果 过滤特征表和序列 过滤嵌合体和可疑序列 过滤嵌合但保留可疑序列 译者简介 Reference 猜你喜欢 ...

  7. 成信大2020C语言编程114,南京信息工程大学2020考研大纲822CC语言程序设计

    <南京信息工程大学2020考研大纲822CC语言程序设计>由会员分享,可在线阅读,更多相关<南京信息工程大学2020考研大纲822CC语言程序设计(8页珍藏版)>请在人人文库网 ...

  8. 时间复杂度o(n^0.5)_铁路轨道资料汇总(含轨道资料、论文、视频讲解)【更新时间2020.11.5】...

    小编主要从以下几个方面整理轨道资料:1线路资料,2机车车辆,3轨道视频,4论文,5打磨资料,6探伤资料,7测量资料,8戴老师语言讲堂,9老魏笔记 1关于铁路线路资料,点击下面链接即可 钢轨摩擦冻结接头 ...

  9. 【不忘初心】Win10_20H2_2009_19042.610_X64_七合一_[纯净精简版][2.83G](2020.11.2)

    母版来自MSDN WIN10_20H2.19042.508,集成补到19042.610,20H2相比1909 2004版本要稳定很多,此版修复了上次的一些问题,应微软毒.粉的要求新增一版带Defend ...

  10. C语言的历史(转)(译)

    发信人: daizisheng (呆子圣), 信区: AnsiC 标  题: C语言历史 发信站: 瀚海星云 (Thu May 29 17:49:11 2003)   C语言的发展 ( 原文在这里) ...

最新文章

  1. bootstrap 多选框
  2. Oracle-index索引解读
  3. python 图片base64 编解码,转换成Opencv,PIL.Image图片格式
  4. 查询去重_如何在 1 秒内做到大数据精准去重?
  5. 故障模块名称kernelbase.dll_故障码都看不懂,你还修啥车?
  6. 考研 考研爬虫大数据分析专业热度
  7. linux 压缩以及归档
  8. 未能初始化appscan应用程序现在将关闭_企业区块链应用程序的两个关键问题
  9. Nginx For Windows 关于 worker_connections 不生效问题
  10. vue3.0中使用Element-plus默认英文组件修改为中文
  11. 持续集成框架,自动部署服务搭建jenkins+maven+svn(git)+shell
  12. Codeforces 650 D. Zip-line
  13. SpringCloud工作笔记052---各种数据库在java中的连接配置_以及连接驱动
  14. paip.信用卡账单处理系统功能vO22
  15. 万能ghost 更改电源
  16. 灯的开关状态 :有 N 个灯放在一排,从 1 到 N 依次顺序编号。有 N 个人也从 1 到 N 依次编号。1 号将灯 全部关闭,2 将凡是 2 的倍数的灯 打开;3 号将凡是 3 的倍数的灯作相
  17. java毕业设计毕业论文答辩管理系统Mybatis+系统+数据库+调试部署
  18. matlab中辗转相除法,基于Matlab的辗转相除法
  19. 微信小程序之兼容问题
  20. Cascade CNN

热门文章

  1. Clannad(1)
  2. Fitbit被谷歌21亿美元收购 品牌启用英文域名Fitbit.com
  3. 【IT情感】个性是成功的利器
  4. 推荐10个关键时刻能派上大用场的神级软件,帮你解决80%的问题
  5. 运用python进行熵值法综合评价
  6. 信息系统开发与管理【七】之 系统实施
  7. 王者荣耀小游戏4.0
  8. 关于 cannot open source input file “ ... “ No such file or directory 相关报错解决方式
  9. 三步搭建免费无限空间无限速网盘——基于docker与阿里云镜像(B站学习)
  10. GEE|分级统计面积