1.2 C语言的特点
1.2.1 结构化程序
什么是结构化程序?先来回想一下现实中盖楼的步骤,首先由设计单位设计图纸,然后建设单位拿到图纸后开始组建各个业务部门来承建工程(例如材料部负责购置建设工程所需的各种材料,工程部负责楼体的建造,监理部负责质量的监督等),而各个部门又会对所属的工人进行分工(例如工程部的工人中有负责抬钢筋的,有负责和泥沙的,有负责浇铸的,有负责砌墙的,有负责开吊机的等)。各个部门的工人们齐心协力、有条不紊地辛勤劳作,最终才能一点一点按照图纸把整座大楼建设完成。其实结构化程序的开发也是如此,首先按照用户的需求进行细致的设计,形成程序的总体框架,然后根据框架的要求,逐步细化出各个业务逻辑,再将各业务逻辑分解为许多模块单元,最终由这些模块单元搭建出整个程序。这种把一个庞大而复杂的问题,经过不断细化分解,最终形成许多简单模块单元的设计思路就是结构化程序设计的思想。现在有点感觉了吧?
用C语言编写出来的程序属于结构化程序,即C语言程序设计就是结构化程序设计,结构化程序设计的概念最早由E. W. Dijikstra在1965年提出,它的主要观点是采用自顶向下、逐步细分和模块化的程序设计方法,使用顺序、选择、循环三种基本控制结构来构造程序。
所谓自顶向下就是要求在程序设计之初要高瞻远瞩、总揽全局,不要太关注旁枝末节,先把程序的主体框架确定下来;逐步细分就是在主体框架确定之后,根据不同的职能划分出不同层次的业务逻辑;模块化就是针对某个业务逻辑制定出一系列具体的实现步骤。所有的模块全部完成之后,整个程序也就基本完成,剩下的就是对这些模块像搭积木一样进行相应的拼装和调试。
1.2.2 C语言的优缺点
C语言从诞生到现在,已经历了半个多世纪,依然受开发者的青睐,显得生机勃勃,在各个领域被广泛使用,这足以证明C语言的重要性和优越性。那么C语言到底有着什么样的优点呢?
1.简洁性
C语言一共只有32个关键字和3种基本控制结构,可通过简短的代码实现模块,并对模块加以整合,从而构建出一个庞大复杂的程序。整个程序由不同的模块相互调用、配合,就像人体内的脉络一样,猛一看好像一团乱麻,仔细分析却又十分清晰。同时,这也给程序的调试带来好处,发现问题后,可寻着脉络到相应的模块中去查找,提高了程序开发、维护和调试的效率。
2.灵活性
C语言程序书写形式自由,语法限制不太严格,程序设计自由度大。C语言能通过简单的整数类型、实数类型和字符类型,灵活地构造出更加复杂的数组、指针、结构体、联合体等复合数据类型,并以此实现链表、队列、栈、树、图等各种数据结构。尤其是C语言中可以使用指针,通过指针直接寻址到相应的内存单元,即可对内存的数据进行访问、修改等操作,从而编写出非常灵动、奇妙的C语言程序。
3.高效性
程序设计语言可以分为机器语言、汇编语言和高级语言,机器语言是使用0和1的二进制码书写的语言,由于计算机能直接识别这种语言,所以使用机器语言编写的程序执行效率非常高。但是,机器语言对于人类来说阅读性极差,直接用机器语言来进行程序设计更加困难,例如一串二进制码“1000011100010100…11001011”,很难看出这是两个整数相加的意思,所以后来产生了汇编代码,它把二进制码中某些具有特殊功能的一块代码串用一些助记符的方式来表达,例如“add ax,bx”,这样使得人类对程序代码的理解变得相对容易。高级语言中使用了和人类最为接近的语言方式来表示,例如“1 + 2”,从这里就能直观地感受到使用高级语言的方便之处。
用C语言编译生成的目标代码质量和执行效率仅比用汇编语言编写的程序低一些,但相比使用其他的高级语言(C++、Java、C#等)编写出的程序要高。
既然C语言有如此多的优点,那它有没有什么缺点呢?其实就像世间万物一样,都有两面性,就好比一把双刃剑,用得好就是杀敌的利器,用不好反而会伤到自己的身体。同样,C语言的这些优点,如果运用得不好就会变成它的缺点,例如整体设计欠缺,算法逻辑混乱,标识命名不得体,代码编排不规范,使用了野指针,出现内存泄漏等,就会使C语言程序失去原有的简洁、灵活和高效,变成一个糟糕的程序。