C语言标准发展
C语言的起源
1972年,贝尔实验室的丹尼斯.里奇(Dennis Ritch)和肯.汤普逊(Ken Thompson)在开发UNIX操作系统时设计了C语言。然而C语言并不完全是里奇突发奇想而来,他是在B语言(汤普逊发明)的基础上进行设计。C语言设计的初衷是将其作为程序员使用的一种编程工具,因此,其主要目标是成为有用的语言。
C语言标准
目前,有许多C实现可用。在理想情况下,编写C程序时,假设该程序中未使用机器特定的编程技术,那么它的运行情况在任何实现中都应该相同。要在实践中做到这一点,不同的实现要遵循一个标准。
C语言发展之初,并没有所谓的C标准。1987年,布莱恩.柯林汉(Brian Kernighan)和丹尼斯.里奇(Dennis Ritch)和著的The Programming Language(C语言程序设计)第一版是公认的C标准,通常称之为K&R C或经典C。特别是,该书中的附录中的"C语言参考手册"已成为C的指导标准。虽然这本书的附录定义了C语言,但是并没有定义C库。与大多数语言不同的是,C语言比其他语言更依赖库,因此需要一个标准库。实际上,由于缺乏官方标准,UNIX实现提供的库已经成为了标准库。
第一个ANSI/ISO C标准
随着C的不断发展,越来越广泛地运用于更多的系统中,C社区意识到需要一个更全面,更新颖,更严格的标准。鉴于此,美国国家标准协会(ANSI)于1983年组建了一个委员会(X3J11),开发了一套新标准,并于1989年正式公布。该标准(ANSI C)定义了C语言和C标准库。国际标准化组织于1990年采用了这套C标准(ISO C)。ISO C和ANSI C是完全相同过的标准。ANSI/ISO标准的最终版本通常叫做C89(ANSI 于1989年批准该标准)或C90(ISO于1990年批准该标准)。另外,由于ANSI先公布C标准,因此业界人士通常使用ANSI C。
C99标准
1994年,ANSI/ISO联合委员会(C9X委员会)开始修订C标准,最终发布了C99标准。该委员会遵循了最初C90的原则,包括保持语言的精炼简单。委员会的用意不是在C语言中添加新特性,而是为了达到新的目标。第一个目标是,支持国际化编程。例如提供多种方法处理国际字符集。第二个目标是,“调整现有实现致力于解决明显的缺陷”。因此,在遇到需要将C移至64位处理器时,委员会根据现实生活中处理问题的经验来添加标准。第三个目标是,为适应科学和工程项目中的关键数值计算,提高C的适应性,让C比FORTRAN更有竞争力。
C99的修订保留了C语言的精髓,C任是一门简洁高效的语言。虽然该标准已经发布了很长时间,但并非所有的编译器都完全实现C99的所有改动。
C11标准
标准委员会在2007年承诺C标准的下一个版本是C1X,2011年终于发布了C11标准。此次,委员会提出了一些新的指导原则。由于供应商并未像C90那样很好地接和支持C99,这使得C99中的一些特性成为C11的可选项。因为委员会认为,不应要求服务小型机市场的供应商支持其目标环境中用不到的特性。另外需要强调的是,修订标准的原因不是因为原本的标准不能用,而是需要跟进新的技术。例如,新标准添加了可选项支持当前使用多处理器的计算机。