搜索
查看: 3837|回复: 14
打印 上一主题 下一主题

C语言的历史和学C语言的理由

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-26 16:35:40 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Nurahmat 于 2012-9-26 16:44 编辑

我认为学习一种编程语言一定要的了解它的发展历史、优点是什么?缺点是什么?最重要的就是我们为什么要选择这门语言,为什么要学习这门语言。先解决了这些问题可以彻底的投入学习环境,然后学习过程当中不会轻易转移到其它语言上面去了。
只要默默地努力,累积经验下去成功就会更接近你的。
个人认为C语言就是每个程序员或者有当程序员梦想的人必须选择学习的一门高级语言。因为它会让你更进一步加深对计算机理解。
掌握好了C语言后面学任何一门编程语言,易如反掌。

历史发展

C语言之所以命名为C,是因为 C语言源自 Ken Thompson 发明的 B语言,而 B语言则源自BCPL语言。
  1967年,剑桥大学的 Martin Richards 对CPL语言进行了简化,于是产生了BCPL(Basic Combined Programming Language)语言。
  1970年,美国贝尔实验室的 Ken Thompson。以BCPL语言为基础,设计出很简单且很接近硬件的B语言(取BCPL的首字母)。并且他用B语言写了第一个UNIX操作系统。
  1972年,美国贝尔实验室的 D.M.Ritchie 在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。



C语言创始人D.M.Ritchie

 

1977年,Dennis M.Ritchie发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》。

  K&R C 
  1978年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语言。Brian Kernighan 和 Dennis Ritchie 出版了一本书,名叫《The C Programming Language》。这本书被 C语言开发者们称为"K&R",很多年来被当作 C语言的非正式的标准说明。人们称这个版本的 C语言为"K&R C"。


  ANSI C 
  1970到80年代,C语言被广泛应用,从大型主机到小型微机,也衍生了C语言的很多不同版本。
  1983年美国国家标准局 (American National Standards Institute,简称ANSI)成立了一个委员会,来制定 C语言标准。
  1989年 C语言标准被批准,被称为 ANSI X3.159-1989 "Programming Language C"。这个版本的C语言标准通常被称为ANSI C。


  C99
  1990年,国际标准化组织ISO(International Organization for Standards)接受了89 ANSI C 为I SO C 的标准(ISO9899-1990)。1994年,ISO修订了C语言的标准。
  1995年,ISO对C90做了一些修订,即“1995基准增补1(ISO/IEC/9899/AMD1:1995)”。
  1999年,ISO又对C语言标准进行修订,在基本保留原来C语言特征的基础上,针对应该的需要,增加了一些功能,命名为ISO/IEC9899:1999。
  在ANSI标准化后,C语言的标准在一段相当的时间内都保持不变,尽管C继续在改进。(实际上,NormativeAmendment1在1995年已经开发了一个新的C语言版本。但是这个版本很少为人所知。)它被ANSI于2000年3月采用。


  C11
  2001年和2004年先后进行了两次技术修正。
  2011年12月8日,ISO正式公布C语言新的国际标准草案:ISO/IEC 9899:2011,即C11。


优点:
  1、简洁紧凑、灵活方便
  C语言一共只有32个关键字,9种控制语句,程序书写形式自由,区分大小写。把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。
  2、运算符丰富
  C语言的运算符包含的范围很广泛,共有34种运算符。C语言把括号、赋值、强制类型转换等都作为运算符处理。从而使C语言的运算类型极其丰富,表达式类型多样化。灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。
  3、数据类型丰富
  C语言的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据结构的运算。并引入了指针概念,使程序效率更高。另外C语言具有强大的图形功能,支持多种显示器和驱动器。且计算功能、逻辑判断功能强大。
  4、表达方式灵活实用
  C语言提供多种运算符和表达式值的方法,对问题的表达可通过多种途径获得,其程序设计更主动、灵活。它语法限制不太严格,程序设计自由度大,如对整型量与字符型数据及逻辑型数据可以通用等。
  5、允许直接访问物理地址,对硬件进行操作
  由于C语言允许直接访问物理地址,可以直接对硬件进行操作,因此它既具有高级语言的功能,又具有低级语言的许多功能,能够像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元,可用来写系统软件。
  6、生成目标代码质量高,程序执行效率高
  C语言描述问题比汇编语言迅速,工作量小、可读性好,易于调试、修改和移植,而代码质量与汇编语言相当。
  7、可移植性好
  C语言在不同机器上的C编译程序,86%的代码是公共的,所以C语言的编译程序便于移植。在一个环境上用C语言编写的程序,不改动或稍加改动,就可移植到另一个完全不同的环境中运行。
  8、表达力强
  C语言有丰富的数据结构和运算符。包含了各种数据结构,如整型、数据类型、指针类型和联合类型等,用来实现各种数据结构的运算。C语言的运算符有34种,范围很宽,灵活使用各种运算符可以实现难度极大的运算。
  C语言能直接访问硬件的物理地址,能进行位(bit)操作。兼有高级语言和低级语言的许多优点。
  它既可用来编写系统软件,又可用来开发应用软件,已成为一种通用程序设计语言。


缺点:
  1. C语言的缺点主要表现在数据的封装性上,这一点使得C在数据的安全性上有很大缺陷,这也是C和C++的一大区别。
  2. C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查等。从应用的角度,C语言比其他高级语言较难掌握。



程序员应该学C语言的十个理由

程序员应该学C语言的十个理由的文章说:每个程序员在他们的编程事业生涯当中都应该学C语言。C语言有太多不容忽视的好处。它不仅可以带来更多的工作机会,而且也会在总体上让你对计算机有更多的了解。

1)相对于其它编程语言(C++,Java),C语言是更底层的。在一个较底层水平编程能够在总体上让你进一步加深对计算机的理解。

2)设备驱动程序和操作系统都是唯一采用C语言写的。现在,也许你从来也不会去写一个设备驱动程序或一个操作系统,但是如果只是要求你去修改一下,会是怎样呢?

3)如果你想要得到一份给微控制器编程的工作那会是什么样呢?它们都是用C语言编程的。你是否打算因为自己不想去学一门新语言而限制你获得更多工作的机会呢?

4)相比用其它语言写出的程序,C语言更小更快。有时你的程序所需要的速度只有C语言能够提供。

5)如果你已经学会了C语言,那么你将能够学习任何现代的编程语言。这背后的原因是所有的现代的编程语言都是基于C语言之上发展而来的(比如Java,C++,C#等等)。

6)由于C语言已经存在了好多年,它有很大的网络社区和收集的代码库。这些允许你快速有效的实现新算法或以前已经编写好的函数。

7)C语言是开源社区的使用语言。开源帖子、Linux都是用C语言编写的。如果你会C语言,你就能够参与到众多的象Source Forge这样的开源社区中并做出贡献。

8)C语言是仅有的教你什么是真正的指针的语言。C#和Java完全跳过了这个章节。指针赋予了C语言不凡的能力。

9)对于编程工作C语言仍然是最一般的要求会的语言。它是值得你花时间去装进肚子里的。

10)任何带有微处理器的东西都支持C语言。从你的微波炉到你的手机,C语言赐予技术以力量


沙发
发表于 2012-9-27 17:19:11 | 只看该作者
顶起楼主!说的好啊!可惜我的太浮躁!
板凳
发表于 2012-10-5 20:47:29 | 只看该作者
顶顶顶顶顶顶顶顶顶顶,可以更好的宣传C语言
                   支持
地板
发表于 2012-10-5 22:17:40 | 只看该作者
~~祭度娘~~~~百科啊~~~~~~
5#
发表于 2012-10-18 23:02:34 | 只看该作者
顶一个~~~~~~~~~~~
6#
发表于 2012-10-19 18:06:26 | 只看该作者
转的好!!支持。
7#
发表于 2012-10-23 21:26:32 | 只看该作者
你说的太好了我非常赞成你的发言
8#
发表于 2012-11-26 18:54:48 | 只看该作者
长见识哦
9#
发表于 2012-12-28 00:07:14 | 只看该作者
asilamu allaykum  yahximu siz.. siz uyghurma....
转的好!!支持。
10#
发表于 2012-12-31 23:14:01 | 只看该作者
掌握好了C语言后面学任何一门编程语言,易如反掌
11#
发表于 2012-12-31 23:14:27 | 只看该作者
掌握好了C语言后面学任何一门编程语言,易如反掌
12#
发表于 2012-12-31 23:14:35 | 只看该作者
掌握好了C语言后面学任何一门编程语言,易如反掌
13#
发表于 2013-1-6 09:54:59 | 只看该作者
14#
 楼主| 发表于 2013-5-12 01:31:42 | 只看该作者
xakila 发表于 2012-12-28 00:07
asilamu allaykum  yahximu siz.. siz uyghurma....
转的好!!支持。

是的,我是维吾尔族。
15#
发表于 2013-5-12 02:44:53 | 只看该作者
前半部分是谭书上摘(改)的吧,不怎么确切,特别是优点那一部分,很多都是和Basic相比而言的。现在学习语言的时候,Basic已经不是一个候选对象了,很多说法也该改一改了。
3、数据类型丰富
  C语言的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据结构的运算。并引入了指针概念,使程序效率更高。另外C语言具有强大的图形功能,支持多种显示器和驱动器。且计算功能、逻辑判断功能强大。

就拿这段来说吧,首先这个类型分类,合理不合理就不说了,但是这种翻译方法肯定会造成误解。
整形?Interger type还是int? 如果你深入学习过C,明白后面所谓的“字符类型”也是一种Interger type的话,那么就会明白这个整形指int,或者long int, short int, int并成。
把float说成实型是很不好的,因为float或者double明显只是实数集的一个真子集而已。

然后呢,“引入了指针概念”也是个不大好的说法,因为很容易误解成指针是C中首创的。而且上文提到了有指针类型,后面又强调“指针概念”,会让人误解这两个东西之间关系。此外,指针不是让程序更高效,而是避免程序员手动操作地址造成的错误。

最后,C具有强大的图形功能这个就更奇怪了。C语言自身没有图形功能,图形功能是靠一些库来实现的。

C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查等。

这个不是缺陷,是一种选择。
Ritchie说他要给程序员以充分的自由,所以这么设计的。Kernighan曾经写过一篇文章 《为什么我最喜欢的语言不是Pascal》,其中就指责了Pascal的类型限制太严格,程序员束手束脚。
同样,数组下标越界不检查,是为了保证速度。

曾经有人说,C的最大优势之一就是,它的缺点已经被研究得太清楚了。

第二段,程序员需要学C的理由是06年一个老外写的,错误颇多
1.C相对于C++是更底层的这个说法不确切,因为C提供的所有“底层”的东西,C++都有。只是C++允许进行更高层的抽象。
2.操作系统只用C写是错误的,linux是纯C,但很多操作系统中都有C++。如果算上操作系统中比较周边的部分,那还有其他语言,例如windows 7的一部分是C#,OS X Lion的一部分是MacRuby
4. C不一定比C++快,单从语言上来说,两者速度差别很小。但是C++的标准库做了很多优化,例如C++的sort就比C的qsort要快。
5. 所有现代语言都是从C发展而生的?这个谣言流传很广,但是很可惜,事实不是这样子。现代语言的始祖是 Fortran Lisp ALGOL Simula Smalltalk这些。之所以会有这种谣言,是因为在web2.0兴起之前,绝大多数程序员都在用Java/C++/C#这些,这三门语言都和C有着很近的血缘。不过,这三门语言身上的血,至少也有一半来自Smalltalk。
8. 这是再次忽略了C++吗
10. 一个芯片是不是支持C,要看是不是有人给它写了一个C编译器和标准库…

关于C的历史,Ritchie大神曾经亲自写过一篇论文,标题是 The Development of the C Language ,有兴趣的可以自己在网上搜到。
此外,《C专家编程》里面也讲了不少C的历史和设计
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表