一.C语言概述
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[*] 这样的写法。不过考虑到效率和实现,这玩意并不是一个新类型。
最新文章
- oracle优化
- 搭建Mantis 缺陷管理系统(转)
- android studio clone 失败
- archlinux锁屏
- Virtualbox后台管理之VBoxManage
- 【转】Android(4.2) Sensors 学习——G-sensor,Gyroscope驱动移植
- 关于cocos2d安装时编译不成功(个人心得)
- 简单介绍关于IOS的生命周期过程
- ADO.NET中的五大对象
- Java之戳中痛点 - (6)避免类型自动转换,例如两个整数相除得浮点数遇坑
- [LeetCode] Minimum Window Subsequence 最小窗口序列
- MySQL复制相关技术的简单总结
- C++ 语法--变量和常量
- 案例:Spark基于用户的协同过滤算法
- 前端面试问题js汇总
- SQL Server 2008 安装教程
- 3D Face Reconstruction
- 利用Xamaria构建Android应用-公交发车信息屏
- redis-day1
- 【六】tf和cgi进行联合试验,完成日志服务器
热门文章
- dubbo源码调试
- uniapp cli版本中如何引入scss?
- 在 CentOS 7 安装 RabbitMQ
- mysql事务原理以及锁
- 并发编程实战-ConcurrentHashMap源码解析
- no Qt platform plugin could be initialized问题的解决办法
- PyQt(Python+Qt)学习随笔:QSpinBox数字设定部件简介
- PyQt(Python+Qt)学习随笔:QMainWindow的setDockNestingEnabled作用案例图解
- 使用k8s部署springboot+redis简单应用
- Vue 的响应式原理中 Object.defineProperty 有什么缺陷?为什么在 Vue3.0 采用了 Proxy,抛弃了 Object.defineProperty?