C语言是什么(非常详细)

张开发
2026/4/9 22:24:45 15 分钟阅读

分享文章

C语言是什么(非常详细)
什么是 C语言它是 20 世纪 70 年代初期在贝尔实验室开发出来的一种广为使用的编程语言。这一简单回答显然没能传达出 C 语言的特别之处。不过别急本节让我们先来回顾一下 C语言的起源、设计目标和这么多年来的发展我们还将讨论 C语言的优缺点。C语言的历史接下来对 C语言的历史做一个简单的回顾从它的起源到它成为一种标准化语言再到它对近代编程语言的影响。1) 起源C语言是贝尔实验室的 Ken Thompson、Dennis Ritchie 等人开发的 UNIX 操作系统的“副产品”。Thompson 独自编写出 UNIX 操作系统的最初版本这套系统运行在 DEC PDP-7 计算机上。这款早期的小型计算机仅有 8KB 内存毕竟那是在 1969 年。与同时代的其他操作系统一样UNIX 系统最初也是用汇编语言编写的。用汇编语言编写的程序往往难以调试和改进UNIX 系统也不例外。Thompson意识到需要用一种更加高级的编程语言来完成 UNIX 系统未来的开发于是他设计了一种小型的 B语言。Thompson 的 B语言是在 BCPL语言20 世纪 60 年代中期产生的一种系统编程语言的基础上开发的而 BCPL语言又可以追溯到最早且影响最深远的语言之一 ——Algol 60 语言。不久Ritchie 也加入到 UNIX 项目中并且开始着手用 B语言编写程序。1970 年贝尔实验室为 UNIX 项目争取到一台 PDP-11 计算机。当 B语言经过改进并能够在 PDP-11 计算机上成功运行后Thompson 用 B语言重新编写了部分 UNIX 代码。到了 1971 年B语言已经明显不适合 PDP-11 计算机了于是 Ritchie 着手开发 B语言的升级版。最初他将新开发的语言命名为 NB语言意为“New B”但是后来新语言越来越偏离 B语言于是他将其改名为 C语言。到了 1973 年C语言已经足够稳定可以用来重新编写 UNIX 系统了。改用 C语言编写程序有一个非常重要的好处可移植性。只要为贝尔实验室的其他计算机编写 C语言编译器他们的团队就能让 UNIX 系统也运行在那些机器上。2) 标准化C语言在 20 世纪 70 年代特别是 1977 年到 1979 年之间持续发展这一时期出现了第一本有关 C语言的书Brian Kernighan 和 Dennis Ritchie 合作编写的《C程序设计语言》一书于 1978 年出版并迅速成为 C程序员必读的“圣经”。因为当时没有 C语言的正式标准所以这本书就成了事实上的标准编程爱好者把它称为 KR 或者“白皮书”。在 20 世纪 70 年代C程序员相对较少而且他们中的大多数人是 UNIX 系统的用户。然而到了 20 世纪 80 年代C语言已不再局限于 UNIX 领域。运行在不同操作系统下的多种类型的计算机都开始使用 C语言编译器特别是迅速壮大的 IBM PC 平台也开始使用 C语言。随着 C语言的迅速普及一系列问题接踵而至。编写新的 C语言编译器的程序员都用 KR 作为参考。但遗憾的是KR 对一些语言特性的描述非常模糊以至于不同的编译器常常会对这些特性做出不同的处理。而且KR 也没有对属于 C语言的特性和属于 UNIX 系统的特性进行明确的区分。更糟糕的是KR 出版以后 C语言仍在不断变化增加了新特性并且去除了一些旧的特性。很快C语言需要一个全面、准确的最新描述开始成为共识。如果没有这样一种标准就会出现各种“方言”这势必威胁到 C语言的主要优势——程序的可移植性。1983 年在美国国家标准学会ANSI的推动下美国开始制订本国的 C语言标准。经过多次修订C语言标准于 1988 年完成并在 1989 年 12 月正式通过成为 ANSI 标准 X3.159-1989。1990 年国际标准化组织ISO通过了此项标准将其作为 ISO/IEC 9899:1990 国际标准。我们把这一 C语言版本称为 C89 或 C90以区别于原始的 C语言版本经典C。1995 年C语言发生了一些改变1999 年通过的 ISO/IEC 9899:1999 新标准中包含了一些更重要的改变这一标准所描述的语言通常称为 C99。由于存在两种标准以前用于描述 C89 的 ANSI C、ANSI/ISO C 和 ISO C 等术语现在就有了二义性。C语言的最近两次改变分别发生在 2011 年和 2018 年。国际标准化组织在 2011 年通过的C语言标准是 ISO/IEC 9899:2011这一标准所描述的 C语言通常称为 C11在 2018 年通过的 C语言标准是 ISO/IEC 9899:2018这一标准所描述的 C语言通常称为 C18。从 C99 到 C11 再到 C18 的变化没有从 C89 到 C99 那么显著。尤其是从 C11 到 C18 的变化仅限于技术修正和澄清总体上没有显著的改变也没有引入新的语言特性。基于C的语言C语言对现代编程语言有着巨大的影响许多现代编程语言都借鉴了大量 C语言的特性。在众多基于 C 的语言中以下几种非常具有代表性考虑到这些新语言的普及程度人们自然会问“C语言还值得学习吗”我想答案是肯定的原因如下 C语言的优缺点与其他任何编程语言一样C语言也有自己的优缺点。这些优缺点都源于该语言的最初用途编写操作系统和其他系统软件和它自身的基础理论体系。C语言是一种底层语言。为了适应系统编程的需要C语言提供了对机器级概念例如字节和地址的访问而这些是其他编程语言试图隐藏的内容。此外C语言还提供了与计算机内置指令紧密协调的操作使得程序可以快速执行。应用程序的输入/输出、存储管理以及其他众多服务都依赖于操作系统因此操作系统一定不能运行得太慢。C语言是一种小型语言。与其他许多编程语言相比C语言提供了一套更有限的特性集合。在KR第 2 版的参考手册中仅用 49 页就描述了整个 C语言。为了保持较少量的特性C语言在很大程度上依赖一个标准函数的“库”“函数”类似于其他编程语言中描述的“过程”“子例程”或“方法”。C语言是一种包容性语言。C语言假设用户知道自己在做什么因此它提供了比其他许多语言更高的自由度。此外C语言不像其他语言那样强制进行详细的错误检查。C语言的优点C语言的众多优点有助于解释为什么这种语言如此流行。1) 高效高效性是 C语言与生俱来的优点之一。发明 C语言就是为了编写那些以往由汇编语言编写的应用程序所以对 C语言来说能够在有限的内存空间里快速运行就显得至关重要了。2) 可移植虽然程序的可移植性并不是 C语言的主要目标但它还是成了 C语言的优点之一。当程序必须在多种机型从个人计算机到超级计算机上运行时常常会用 C语言来编写。C程序具有可移植性的一个原因是该语言没有分裂成不兼容的多种分支这要归功于 C语言早期与 UNIX系统的结合以及后来的 ANSI/ISO标准。另一个原因是 C语言编译器规模小且容易编写这使得它们得以广泛应用。3) 功能强大C语言拥有一个庞大的数据类型和运算符集合这个集合使得 C语言具有强大的表达能力往往寥寥几行代码就可以实现许多功能。4) 灵活虽然 C语言最初设计是为了系统编程但是没有固有的约束将它限制在此范围内。C语言现在可以用于编写从嵌入式系统到商业数据处理的各种应用程序。此外C语言在其特性使用上的限制非常少。在其他语言中认定为非法的操作在C语言中往往是允许的。例如C语言允许一个字符与一个整数值相加或者是与一个浮点数相加。虽然灵活性可能会让某些错误溜掉但是它使编程变得更加轻松。5) 标准库C语言的一个突出优点就是它具有标准库该标准库包含了数百个可以用于输入/输出、字符串处理、存储分配以及其他实用操作的函数。6) 与UNIX系统的集成C语言在与 UNIX 系统包括广为人知的 Linux结合方面特别强大。事实上一些 UNIX 工具甚至假定用户是了解 C语言的。C语言的缺点C语言的缺点和它的许多优点是同源的均来自C语言与机器的紧密结合。下面是众所周知的几个问题。1) C程序更容易隐藏错误C语言的灵活性使得用它编程出错的概率较高。在用其他语言编程时可以发现的错误C语言编译器却无法检查出来。从这方面来说C语言与汇编语言极为相似后者直到程序运行时才能检查到大多数错误。更糟的是C语言还包含大量不易觉察的隐患比如一个额外的分号可能导致无限循环遗漏一个 可能引发程序崩溃。2) C程序可能会难以理解虽然大多数衡量标准认为 C语言是一种小型语言但是它有许多其他通用语言没有的特性并且常常被误解。这些特性可以用多种方式结合使用其中的一些结合方式尽管编程者心知肚明但是其他人恐怕难以理解。另一个问题就是 C程序简洁的本质。C语言产生的时候正是人机交互最为单调乏味的时期因此设计者特意使 C语言简洁以便将输入和编辑程序的用时减到最少。C语言的灵活性也可能是一个负面因素过于聪明的程序员甚至可以编写出除了他们自己几乎没人可以读得懂的程序。3) C程序可能会难以修改如果在设计中没有考虑维护的问题那么用 C语言编写的大规模程序将很难修改。现代的编程语言通常都会提供“类”和“包”之类的语言特性这样的特性可以把大的程序分解成许多更容易管理的模块。遗憾的是C语言恰恰缺少这样的特性。

更多文章