1. C语言概述

如果有人说“我想要一种语言,只需对它说我要干什么就行”,给他一支棒棒糖好了。

C 语言的优缺点

  • C语言是一种底层语言。 为了适应系统编程的需要,C语言提供了对机器级概念(例如,字节和地址)的访问,而这些是其他编程语言试图隐藏的内容。此外,C语言还提供了与计算机内置指令紧密协调的操作,使得程序可以快速执行。应用程序的输入/输出、存储管理以及其他众多服务都依赖于操作系统,因此操作系统一定不能运行得太慢。

  • C语言是一种小型语言。 与其他许多编程语言相比,C语言提供了一套更有限的特性集合。(在K&R第2版的参考手册中仅用49页就描述了整个C言。)为了保持较少量的特性,C语言在很大程度上依赖一个标准函数的“库”(“函数”类似于其他编程语言中描述的“过程”“子例程”或“方法”)。

  • C语言是一种包容性语言。 。C语言假设用户知道自己在做什么,因此它提供了比其他许多语言更高的自由度。此外,C语言不像其他语言那样强制进行详细的错误检查。

C语言的优点

  • 高效。 高效性是C语言与生俱来的优点之一。发明C语言就是为了编写那些以往由汇编语言编写的应用程序,所以对C语言来说,能够在有限的内存空间里快速运行就显得至关重要了。

  • 可移植。 虽然程序的可移植性并不是C语言的主要目标,但它还是成了C语言的优点之一。当程序必须在多种机型(从个人计算机到超级计算机)上运行时,常常会用C语言来编写。C程序具有可移植性的一个原因是该语言没有分裂成不兼容的多种分支(这要归功于C语言早期与UNIX系统的结合以及后来的ANSI/ISO标准)。另一个原因是 C语言编译器规模小且容易编写,这使得它们得以广泛应用。最后,C语言自身的特性也支持可移植性(尽管它没有阻止程序员编写不可移植的程序)。

  • 功能强大。 C语言拥有一个庞大的数据类型和运算符集合,这个集合使得C语言具有强大的表达能力,往往寥寥几行代码就可以实现许多功能。

  • 灵活。 虽然C语言最初设计是为了系统编程,但是没有固有的约束将它限制在此范围内。C语言现在可以用于编写从嵌入式系统到商业数据处理的各种应用程序。此外,C语言在其特性使用上的限制非常少。在其他语言中认定为非法的操作在C语言中往往是允许的。例如,C语言允许一个字符与一个整数值相加(或者是与一个浮点数相加)。虽然灵活性可能会让某些错误溜掉,但是它使编程变得更加轻松。

  • 标准库。 C语言的一个突出优点就是它具有标准库,该标准库包含了数百个可以用于输入/输出、字符串处理、存储分配以及其他实用操作的函数。

  • 与UNIX系统的集成。 C语言在与UNIX系统(包括广为人知的Linux)结合方面特别强大。事实上,一些UNIX工具甚至假定用户是了解C语言的。

C语言的缺点

  • C程序更容易隐藏错误。 C语言的灵活性使得用它编程出错的概率较高。在用其他语言编程时可以发现的错误,C语言编译器却无法检查出来。从这方面来说,C语言与汇编语言极为相似,后者直到程序运行时才能检查到大多数错误。更糟的是,C语言还包含大量不易觉察的隐患。在后续的章节中我们将看到,一个额外的分号可能导致无限循环,遗漏一个&可能引发程序崩溃。

  • C程序可能会难以理解。 虽然大多数衡量标准认为C语言是一种小型语言,但是它有许多其他通用语言没有的特性(并且常常被误解)。这些特性可以用多种方式结合使用,其中的一些结合方式尽管编程者心知肚明,但是其他人恐怕难以理解。另一个问题就是C程序简洁的本质。C语言产生的时候正是人机交互最为单调乏味的时期,因此设计者特意使C语言简洁以便将输入和编辑程序的用时减到最少。C语言的灵活性也可能是一个负面因素,过于聪明的程序员甚至可以编写出除了他们自己几乎没人可以读得懂的程序。

  • C程序可能会难以修改。 如果在设计中没有考虑维护的问题,那么用C语言编写的大规模程序将很难修改。现代的编程语言通常都会提供“类”和“包”之类的语言特性,这样的特性可以把大的程序分解成许多更容易管理的模块。遗憾的是,C语言恰恰缺少这样的特性。

高效的使用C语言

  • 学习如何规避C语言的缺陷.

  • 使用软件工具使程序更加可靠.

  • 利用现有的代码库.

  • 采用一套切合实际的编码规范.

  • 避免”投机取巧”和极度复杂的代码.

  • 紧贴标准.