2012年(16)
分类: C/C++
2012-08-14 19:57:27
|
在这一小节中,谭老师简要地介绍了C语言的发展历程,让我们认识到C语言是一门历史悠久的程序设计语言,从最初的只是为了描述和实现UNIX的需要而设计的一种工作语言,到后来得到业界的广泛认同而逐渐成为一种流行的程序设计语言。它的流行,也证明了其鲜明的特点让它具有了旺盛的生命力,C语言已经流行,并且还将继续流行,它始终是一门应用广泛的主流程序设计语言。(这句话的潜台词是,学习C语言大有“前/钱”途。)
C语言能够受到大家的欢迎和认可,能够在软件业界广泛流行,这不是偶然的,是由它的鲜明的程序设计特点决定的。谭老师总结了C语言的8个特点,从“语言简洁、紧凑,使用方便、灵活”到“运算符丰富”,从“具有结构化的控制语句”到“语法限制不太严格,程序设计自由度大”等等。
没错,这些确实是C语言的特点,但是,真正让C语言能够在众多的程序设计语言中屹立不倒的特点只有两个:
l 接近底层,可以直接对硬件进行操作
严格地说,C语言是一种介于低级程序设计语言(例如,汇编语言)和高级程序设计语言(例如,C++、Java)之间的中级程序设计语言。它把高级语言的基本结构和语句与低级语言的实用性结合起来,这使得程序员可以非常容易地利用C语言直接对计算机的硬件单元位、字节和地址进行操作。这样的特点,决定了C语言在某些需要对硬件进行操作的应用场景下,例如嵌入式系统中,成为程序员们的不二之选 。
l 执行效率高,具有接近汇编的性能
除了汇编语言之外,C语言应该是当今主流程序设计语言中,执行效率最高的程序设计语言了。一般而言,经过编译器优化后的C语言程序,其执行效率只比汇编程序生成的目标代码效率低10%~20%。对于某些对性能要求极高的系统软件,诸如Linux内核、搜索引擎算法,以及大型的科学计算程序等等,恐怕只有C语言才能够胜任。这也决定了C语言在这些领域具有长久的生命力,始终处于一种无可替代的地位。
事物都有两面性,C语言的优点非常突出,但相对于那些高级程序设计语言,其缺点也非常明显。
l 数据封装性不强
C语言的一个重要的缺点就是它对数据的封装性不强,基本上,在程序中我们可以对任何数据进行任意的访问,而不管这个数据是关键的重要数据还是某个无关紧要的临时数据。这一点使得C语言在数据的安全性上有很大缺陷,这也是C语言和C++语言的一大区别。
l 结构化的程序设计语言,无法支持复杂的大型业务型系统的开发
C语言是一种优秀的结构化程序设计语言,可以很好地实现程序代码及数据的相互分离,利于程序的开发和维护。出于性能的需求,它也被用于构建一些底层系统(例如Linux kernel)。但是,在开发一些更加复杂的业务型系统的时候,因为其抽象层次比较低,这样的设计方法却可能让整个项目陷入“需求变化”的深渊,一旦需求发生变化,则可能需要对整个系统的设计进行变更,这使得C语言无法很好地支持复杂的大型系统的开发,极大地限制了C语言的应用。这也是为什么后来出现了面向对象的设计思想以及C++语言。
l C语言语法灵活,难以掌握
C语言的理念与UNIX系统以及Hacker精神是一脉传承的:程序员应该对他自己的行为负责。因此没有在语言层级上做过多的约束。保持语言的强大、简洁、灵活是优先考虑的,而不是对初学者的亲和度。正是因为贯彻着这样的精神,C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查等。因为其灵活性,使得从应用的角度,C语言比其他高级语言较难掌握,这也限制了C语言的应用普及。
优点对缺点,半斤对八两
这样看来,C语言是一种优点和缺点都非常突出的程序设计语言,就像一个有个性的人一样,一面是天使,一面是魔鬼。我们只有对C语言的优点和缺点都有一个全面而清晰的认识,才能真正理解C语言,把握C语言的个性,充分利用好C语言的优点,尽量避免C语言的缺点,让C语言在合适的应用场景下发挥最大的作用。