C语言是中级语言
C语言通常称为中级计算机语言。中级语言并没有贬义,不意味着它功能差、难以使用、或者比B A S I C、P a s c a l那样的高级语言原始,也不意味着它与汇编语言相似,会给使用者带来类似的麻烦。C语言之所以被称为中级语言,是因为它把高级语言的成分同汇编语言的功能结合起来了。表1 - 1表明了C语言在计算机语言中所处的地位。
作为中级语言,C答应对位、字节和地址这些计算机功能中的基本成分进行操作。C语言程序非常轻易移植。可移植性表示为某种计算机写的软件可以用到另一种机器上去。举例来说,假如为苹果机写的一个程序能够方便地改为可以在IBM PC 上运行的程序,则称为是可移植的。
所有的高级语言都支持数据类型的概念。一个数据类型定义了一个变量的取值范围和可在其上操作的一组运算。常见的数据类型是整型、字符型和实数型。虽然C语言有五种基本数据类型,但与P a s c a l或A d a相比,它却不是强类型语言。C程序答应几乎所有的类型转换。例如,字符型和整型数据能够自由地混合在大多数表达式中进行运算。这在强类型高级语言中是不答应的。
C语言的另一个重要特点是它仅有3 2个要害字,这些要害字就是构成C语言的命令。和IBM PC的B A S I C相比,后者包含的要害字达1 5 9个之多。
C语言是结构化语言
虽然从严格的学术观点上看,C语言是块结构(b l o c k - s t r u c t u r e d)语言,但是它还是常被称为结构化语言。这是因为它在结构上类似于A L G O L、P a s c a l和M o d u l a - 2(从技术上讲,块结构语言答应在过程和函数中定义过程或函数。用这种方法,全局和局部的概念可以通过“作用域”规则加以扩展,“作用域”治理变量和过程的“可见性”。因为C语言不答应在函数中定义函数,所以不能称之为通常意义上的块结构语言)。
结构化语言的显著特征是代码和数据的分离。这种语言能够把执行某个非凡任务的指令和数据从程序的其余部分分离出去、隐藏起来。获得隔离的一个方法是调用使用局部(临时)变量的子程序。通过使用局部变量,我们能够写出对程序其它部分没有副作用的子程序。这使得编写共享代码段的程序变得十分简单。假如开发了一些分离很好的函数,在引用时我们仅需要知道函数做什么,不必知道它如何做。切记:过度使用全局变量(可以被全部程序访问的变量)会由于意外的副作用而在程序中引入错误。
结构化语言比非结构化语言更易于程序设计,用结构化语言编写的程序的清楚性使得它们更易于维护。这已是人们普遍接受的观点了。C语言的主要结构成分是函数C的独立子程序。
在C语言中,函数是一种构件(程序块),是完成程序功能的基本构件。函数答应一个程序的诸任务被分别定义和编码,使程序模块化。可以确信,一个好的函数不仅能正确工作且不会对程序的其它部分产生副作用。
1.2.3 C语言是程序员的语言
也许你会问“所有的计算机语言不都是程序员使用的吗?”,回答是断然的“否”。我们考虑典型的非程序员的语言C O B O L和B A S I C。C O B O L的设计使程序员难以改变所编写代码的可靠性,甚至不能提高代码的编写速度。
然而C O B O L设计者的本意却是打算使非程序员能读程序(这是不大可能的事)。注重,这并不是攻击C O B O L的优点,而是想指出,它没有被设计成为程序员的理想语言。BASIC 的主要目的是答应非专业程序员在计算机上编程解决比较简单的问题。与其形成鲜明对照的是C 语言,由于程序生成、修改和现场测试自始至终均由真正的程序员进行,因而它实现了程序员的期望:很少限制、很少强求、块结构、独立的函数以及紧凑的要害字集合。用C语言编程,程序员可以获得高效机器代码,其效率几乎接近汇编语言代码。
C语言被程序员广泛使用的另一个原因是可以用它代替汇编语言。汇编语言使用的汇编指令,是能够在计算机上直接执行的二进制机器码的符号表示。汇编语言的每个操作都对应为计算机执行的单一指令。虽然汇编语言给予程序员达到最大灵活性和最高效率的潜力,但开发和调试汇编语言程序的困难是难以忍受的。非结构性使得汇编语言程序难于阅读、改进和维护。也许更重要的是,汇编语言程序不能在使用不同C P U的机器间移植。
最初,C语言被用于系统程序设计。一个“系统程序”是一大类程序的一部分,这一大类构成了计算机操作系统及实用程序。通常被称为系统程序的有:
• 操作系统。
• 翻译程序。
• 编辑程序。
• 汇编程序。
• 编译程序。
• 数据库治理程序。
随着C语言的普及,加之其可移植性和高效率,许多程序员用它设计各类程序。几乎所有的计算机上都有C语言编译程序,这使我们可以很少改动甚至不加改动地将为一种机器写的C 语言源程序在另一种机器上编译执行。可移植性节省了时间和财力。
C语言不仅在速度和结构上有它的优势,而且每个C语言系统都提供了专门的函数库,程序员可以根据不同需要对其进行剪裁,以适应各种程序的设计。由于它答应(更准确地说是鼓励)分别编译,所以C语言可使程序员方便地治理大型项目,最大限度地减少重复劳动。