C语言的起源

贝尔实验室的Dennis Ritchie在1972年开发了C,当时他正与ken Thompson一起设计UNIX操作系统,然而,C并不是完全由Ritchie构想出来的。它来自Thompson的B语言。

C语言的优点

​ 在过去的几十年中,c语言已成为最流行和最重要的编程语言之一。

  • 高效性。c语言是一种高效的语言。c表现出通常只有汇编语言才具有的精细的控制能力(汇编语言是特定cpu设计所采用的一组内部制定的助记符。不同的cpu类型使用不同的汇编语言)。如果愿意,您可以细调程序以获得最大的速度或最大的内存使用率

  • 可移植性。c语言是一种可移植的语言。意味着,在一个系统上编写的c程序经过很少改动或不经过修改就可以在其他的系统上运行。

  • 强大的功能和灵活性。c强大而又灵活。比如强大灵活的UNIX操作系统便是用c编写的。其他的语言(Perl、Python、BASIC、Pascal)的许多编译器和解释器也都是用c编写的。结果是当你在一台Unix机器上使用Python时,最终由一个c程序负责生成最后的可执行程序。

语言标准

K&R C

​ 起初,C语言没有官方标准。1978年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语言。布莱恩·柯林汉(Brian Kernighan) 和 丹尼斯·里奇(Dennis Ritchie) 出版了一本书,名叫《The C Programming Language》。这本书被 C语言开发者们称为K&R,很多年来被当作 C语言的非正式的标准说明。人们称这个版本的 C语言为K&R C

K&R C主要介绍了以下特色:结构体(struct)类型;长整数(long int)类型;无符号整数(unsigned int)类型;把运算符=+和=-改为+=和-=。因为=+和=-会使得编译器不知道使用者要处理i = -10还是i =- 10,使得处理上产生混淆。

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

ANSI C/C89标准

​ 1970到80年代,C语言被广泛应用,从大型主机到小型微机,也衍生了C语言的很多不同版本。1983年,美国国家标准协会(ANSI)成立了一个委员会X3J11,来制定 C语言标准。

​ 1989年,美国国家标准协会(ANSI)通过了C语言标准,被称为ANSI X3.159-1989 "Programming Language C"。因为这个标准是1989年通过的,所以一般简称C89标准。有些人也简称ANSI C,因为这个标准是美国国家标准协会(ANSI)发布的。

​ 1990年,国际标准化组织(ISO)和国际电工委员会(IEC)把C89标准定为C语言的国际标准,命名为ISO/IEC 9899:1990 - Programming languages -- C[5] 。因为此标准是在1990年发布的,所以有些人把简称作C90标准。不过大多数人依然称之为C89标准,因为此标准与ANSI C89标准完全等同。

​ 1994年,国际标准化组织(ISO)和国际电工委员会(IEC)发布了C89标准修订版,名叫ISO/IEC 9899:1990/Cor 1:1994[6] ,有些人简称为C94标准

​ 1995年,国际标准化组织(ISO)和国际电工委员会(IEC)再次发布了C89标准修订版,名叫ISO/IEC 9899:1990/Amd 1:1995 - C Integrity[7] ,有些人简称为C95标准

C99标准

​ 1999年1月,国际标准化组织(ISO)和国际电工委员会(IEC)发布了C语言的新标准,名叫ISO/IEC 9899:1999 - Programming languages -- C ,简称C99标准。这是C语言的第二个官方标准。

例如:

增加了新关键字 restrict,inline,_Complex,_Imaginary,_Bool

支持 long long,long double _Complex,float _Complex 这样的类型

支持了不定长的数组。数组的长度就可以用变量了。声明类型的时候呢,就用 int a[*] 这样的写法。不过考虑到效率和实现,这玩意并不是一个新类型。

最新文章

  1. oracle优化
  2. 搭建Mantis 缺陷管理系统(转)
  3. android studio clone 失败
  4. archlinux锁屏
  5. Virtualbox后台管理之VBoxManage
  6. 【转】Android(4.2) Sensors 学习——G-sensor,Gyroscope驱动移植
  7. 关于cocos2d安装时编译不成功(个人心得)
  8. 简单介绍关于IOS的生命周期过程
  9. ADO.NET中的五大对象
  10. Java之戳中痛点 - (6)避免类型自动转换,例如两个整数相除得浮点数遇坑
  11. [LeetCode] Minimum Window Subsequence 最小窗口序列
  12. MySQL复制相关技术的简单总结
  13. C++ 语法--变量和常量
  14. 案例:Spark基于用户的协同过滤算法
  15. 前端面试问题js汇总
  16. SQL Server 2008 安装教程
  17. 3D Face Reconstruction
  18. 利用Xamaria构建Android应用-公交发车信息屏
  19. redis-day1
  20. 【六】tf和cgi进行联合试验,完成日志服务器

热门文章

  1. dubbo源码调试
  2. uniapp cli版本中如何引入scss?
  3. 在 CentOS 7 安装 RabbitMQ
  4. mysql事务原理以及锁
  5. 并发编程实战-ConcurrentHashMap源码解析
  6. no Qt platform plugin could be initialized问题的解决办法
  7. PyQt(Python+Qt)学习随笔:QSpinBox数字设定部件简介
  8. PyQt(Python+Qt)学习随笔:QMainWindow的setDockNestingEnabled作用案例图解
  9. 使用k8s部署springboot+redis简单应用
  10. Vue 的响应式原理中 Object.defineProperty 有什么缺陷?为什么在 Vue3.0 采用了 Proxy,抛弃了 Object.defineProperty?