1.8 语言标准

目前,有许多C实现方式可用。理想情况下,编写C程序时,假如该程序未使用机器特定的编程技术,则它在任何实现方式中的运行应该是相同的。要在实践中做到这一点,不同的实现方式需要遵守一个公认的标准。

首先说明一点,C没有官方的标准。不过,Brian Kernighan和Dennis Ritchie编写的The C Programming Language第1版(1978)成为大家接受的标准,通常称为K&R C或经典C。特别是这本书附录中的“CReference Manual”已成为C实现的指南。例如,编译器都会声明它可提供一个完整的K&R实现。然而,虽然该附录定义了C语言,但是却没有定义C库。因为C比大多数其他语言更加依赖库,所以还需要一个库标准。因为缺乏任何官方标准,所以提供UNIX实现的库成为一个事实上的标准。

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

1.8.1 第1个ANSI/ISO C标准

随着C的发展和更加广泛地用于更多种类的系统上,使用C的群体意识到它需要一个更加全面、新颖和严格的标准。为满足这一要求,美国国家标准化组织(ANSI)在1983年设立了一个委员会(X3J11)以发展一个新的标准,该标准于1989年正式采用。这个新标准(ANSI C)定义了语言和一个标准C库。国际标准化组织于1990年采用了一个C标准(ISO C)。ISO C和ANSI C实质上是同一个标准。ANSI/ISO标准的最终版本通常被称为C89 (因为ANSI于1989年批准了该标准)或C90 (因为ISO于1990年批准了该标准)。然而,因为ANSI版本是首先出现的,所以人们通常使用ANSI C这一术语。

该委员会有一些指导原则。最有趣的可能是:保持C的精神。委员会表述这一精神时列出了以下几点思想:

● 相信程序员;

● 不妨碍程序员做需要完成的事情;

● 让语言保持短小简单;

● 只提供一种方法来执行一个操作;

● 使程序运行速度快,即使不能保证其可移植性。

在最后一点上委员会的用意是,一种实现应该以最适合于目标计算机上工作的条件来定义一个特定的操作,而不是试图制定一个抽象、统一的定义。在学习C语言的过程中,您会遇到这一思想的例子。

1.8.2 C99 标准

1994年,修订标准的工作开始了,这一努力的结果是产生了C99标准。一个联合ANSI/ISO委员会(即C9X委员会)签署了C90标准的最初原则,包括保持语言短小而简单。他们的意图不是为语言添加新的特性,而是为了满足新的目标。新目标之一是支持国际化编程,例如,提供了处理国际字符集的方法。第二个目标是“整理现有的惯例以解决明显的缺点”。因此,在遇到需要将C移植到64位处理器时,委员会根据在真实生活中处理问题的人的经验来添加标准。第三个目标是针对科学和工程项目的重要数字计算改进C的适应能力。

这三点(国际化、修正其不足和改进计算的实用性)是主要的面向改变的目标。形成的关于更改的计划在性质上更加保守,例如,让与C90和C++的不兼容性达到最小,让语言在概念上保持简单。用委员会的话来说就是“……委员会希望C++成为重要的和强有力的语言”。

结果是C99的修改保持了C的本质特性,C继续是一种简短、清楚、高效的语言。本书指出了C99中的许多修改。因为目前大多数编译器没有完全实现所有C99的修改,所以您可能会发现一些修改在您的系统上不可用。或者您可能会发现,只有修改编译器的设置以后,才能够看到一些C99的特性。