C语言之路 第零章

来源:互联网 发布:windows桌面壁纸 高清 编辑:程序博客网 时间:2024/06/05 13:46

第零章 绪论

工欲善其事,必先利其器

0.1 目前有这样一种观点存在:“C语言已经被C++,C#及JAVA这样一些语言取代了,为什么还要如此费力地去学习C语言呢?”

这种观点是不成立的,理由如下:

●我相信没有一个人能够直接学习C++或JAVA。这是因为学习这些语言时,还要学会处理一些和实际的程序语言基础不相关的东西,如类、对象、继承、多态、模板、异常处理及引用等。在学习程序语言基础的时候,就学习这些复杂的概念,这有点像把马车放在马的前面一样,会令人觉得很不自然。因此,人们应该先透彻地学习C语言,了解C语言的基本原理,再转而学习C++,C#或JAVA。尽管这样的分部学习过程可能会花很多时间,但最终你一定会发现这样做是值得的。

●C++,C#或JAVA是利用面向对象程序设计(OOP)来设计程序的。这种设计方法提供了很多的有利条件。但要使用这种方法,仍需要对C语言的基础有很好的掌握,同时还需要有基本的编程技巧。

●尽管这些年来诞生了许多C++及JAVA的编程工具和编程框架,但C语言的重要性仍是不会受到挑战的,因为在使用这些框架或工具的时候,都会有意无意地使用到C语言基础的核心。这也是为什么在学习C++,C#,JAVA前应当学习C语言的另一个很好的原因。

●流行的操作系统如Windows,UNIX,及Linux的主要部分仍然是用C语言写的。这是因为迄今为止,这些语言的性能(执行速度)还没有能够击败C语言。更重要的是,当谁想要扩展某个操作系统以便能够满足新的设备时,他必须编写设备驱动程序,而这些驱动程序只能用C语言来编写。

●移动设备,如手机和掌上电脑,已成为当今的潮流,并且常见的消费品,如微波炉、洗衣机和数码相机,随着时间的推移变得越来越精锐乐。而它们的精锐来自于一个微处理器,该微处理器被嵌入了操作系统和程序。这些程序不仅要运行快速,而且运行的空间有限。无疑这些程序都是用C语言写的。由于有时间及空间上的限制,在构建这样的操作系统和程序时,所选的语言自然就是C语言。

●你一定已经看到过在许多专业的3D计算机游戏中,用户进行目标导航,如移动宇宙飞船和向入侵者发射子弹。这些游戏的关键是速度。毫无疑问,如果用户要花很长的时间来移动飞船或射出子弹,这样的游戏是不可能受欢迎的。为了满足游戏者的需求,游戏必须要能够针对用户的输入迅速地做出反应。在这里C语言相对其他语言要稍胜一筹。许多流行的游戏框架都是用C语言构建的。

●有时,人们需要和硬件设备直接进行交互。由于C语言提供了许多机制可以使这种交互变得可行,并且不会降低其性能,所以C语言自然就成了程序员的首选。

我希望上面这些具有很强的说服力,指出为什么你应该采用C语言作为自己的第一语言,并且把它作为学习程序设计语言过程中一个非常重要的步骤。

0.2 C语言的优点和缺点

C语言的优点:

●简洁紧凑、灵活方便

●运算符丰富

●数据结构丰富

●C是结构式语言

●C语法限制不太严格,程序设计自由度大

●C语言允许直接访问物理地址,可以直接对硬件进行操作

● C语言程序生成代码质量高,程序执行效率高

●C语言适用范围大,可移植性好

● C语言有一个突出的优点就是适合于多种操作系统,如DOS、UNIX,也适用于多种机型

●有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护

  C语言的缺点:

●C语言的缺点主要是表现在数据的封装性上,这一点使得C在数据的安全性上做的有很大缺陷,这也是C和C++的一大区别。

● C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查等。从应用的角度,C语言比其他高级语言较难掌握。

●可重用性差

●数据安全性差

●难以开发大型软件和图形界面的应用软件

●把数据和处理数据的过程分离为相互独立的实体

●当数据结构改变时,所有相关的处理过程都要进行相应的修改

●每一种相对于老问题的新方法都要带来额外的开销

●图形用户界面的应用程序,很难用过程来描述和实现,开发和维护也都很困难

 

0.3 C语言的设计是非常优美的,只要理解了少数的基本概念和基本原则就可以根据组合规则写出任意复杂的程序,很少有例外的规定说这样组合是不允许的,或者那样类推是错误的。相反,C++的设计就非常复杂,充满了例外,全世界没有几个人能把C++的所有规则牢记于心,因而C++的设计一直饱受争议。

0.4 C标准库主要是由两部分组成,一部分描述C的语法,另一部分描述C标准库。C标准定义了一组头文件,每个头文件中包含一些相关的函数、变量、类型声明和宏定义。要在一个平台上支持C语言,不仅要实现C编译器,还要实现C标准库,这样的实现才算附和C标准。不符合C标准的实现也是存在的,例如很多单片机的C语言开发工具只有C编译器而没有完整的C标准库