《C Primer Plus(第6版)中文版》一1.6 语言标准

简介:

本节书摘来自异步社区《C Primer Plus(第6版)中文版》一书中的第1章,第1.6节,作者 傅道坤,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.6 语言标准

目前,有许多C实现可用。在理想情况下,编写C程序时,假设该程序中未使用机器特定的编程技术,那么它的运行情况在任何实现中都应该相同。要在实践中做到这一点,不同的实现要遵循同一个标准。

C语言发展之初,并没有所谓的C标准。1978年,布莱恩·柯林汉(Brian Kernighan)和丹尼斯·里奇(Dennis Ritchie)合著的The C Programming Language(《C语言程序设计》)第1版是公认的C标准,通常称之为K&R C或经典C。特别是,该书中的附录中的“C语言参考手册”已成为实现C的指导标准。例如,编译器都声称提供完整的K&R实现。虽然这本书中的附录定义了C语言,但却没有定义C库。与大多数语言不同的是,C语言比其他语言更依赖库,因此需要一个标准库。实际上,由于缺乏官方标准,UNIX实现提供的库已成为了标准库。

1.6.1 第1个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。

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

信任程序员;
不要妨碍程序员做需要做的事;
保持语言精练简单;
只提供一种方法执行一项操作;
让程序运行更快,即使不能保证其可移植性。
在最后一点上,标准委员会的用意是:作为实现,应该针对目标计算机来定义最合适的某特定操作,而不是强加一个抽象、统一的定义。在学习C语言过程中,许多方面都反映了这一哲学思想。

1.6.2 C99标准

1994年,ANSI/ISO联合委员会(C9X委员会)开始修订C标准,最终发布了C99标准。该委员会遵循了最初C90标准的原则,包括保持语言的精练简单。委员会的用意不是在C语言中添加新特性,而是为了达到新的目标。第1个目标是,支持国际化编程。例如,提供多种方法处理国际字符集。第2个目标是,“调整现有实践致力于解决明显的缺陷”。因此,在遇到需要将C移至64位处理器时,委员会根据现实生活中处理问题的经验来添加标准。第3个目标是,为适应科学和工程项目中的关键数值计算,提高C的适应性,让C比FORTRAN更有竞争力。

这3点(国际化、弥补缺陷和提高计算的实用性)是主要的修订目标。在其他方面的改变则更为保守,例如,尽量与C90、C++兼容,让语言在概念上保持简单。用委员会的话说:“……委员会很满意让C++成为大型、功能强大的语言”。

C99的修订保留了C语言的精髓,C仍是一门简洁高效的语言。本书指出了许多C99修改的地方。虽然该标准已发布了很长时间,但并非所有的编译器都完全实现C99的所有改动。因此,你可能发现C99的一些改动在自己的系统中不可用,或者只有改变编译器的设置才可用。

1.6.3 C11标准

维护标准任重道远。标准委员会在2007年承诺C标准的下一个版本是C1X,2011年终于发布了C11标准。此次,委员会提出了一些新的指导原则。出于对当前编程安全的担忧,不那么强调“信任程序员”目标了。而且,供应商并未像对C90那样很好地接受和支持C99。这使得C99的一些特性成为C11的可选项。因为委员会认为,不应要求服务小型机市场的供应商支持其目标环境中用不到的特性。另外需要强调的是,修订标准的原因不是因为原标准不能用,而是需要跟进新的技术。例如,新标准添加了可选项支持当前使用多处理器的计算机。对于C11标准,我们浅尝辄止,深入分析这部分内容已超出本书讨论的范围。

注意

本书使用术语ANSI C、ISO C或ANSI/ISO C讲解C89/90和较新标准共有的特性,用C99或C11介绍新的特性。有时也使用C90(例如,讨论一个特性被首次加入C语言时)。

相关文章
|
12月前
|
存储 编译器 程序员
C Primer Plus第六版(中文版) 课后复习题1 1.12 复习题
1.对编程而言,可移植性意味着什么? 完美的可移植程序是,源代码不需要任何修改就能在不同计算机系统中成功编译的程序。
52 0
|
12月前
|
C语言
C Primer Plus第六版(中文版) 课后复习题2 9.10 复习题
C语言的基本模块是什么? c语言程序中的基本功能模块为“函数”。一个C语言程序可以由一个主函数和若干个函数构成;一个大的应用程序一般应该分为多个程序模块,每一个模块用来实现一个功能,而模块的功能是由函数完成的。
88 0
|
机器学习/深度学习 IDE Ubuntu
《C++ Primer中文版(第5版)》学习笔记与习题完整发布!
《C++ Primer中文版(第5版)》学习笔记与习题完整发布!
453 0
《C++ Primer中文版(第5版)》学习笔记与习题完整发布!
|
C语言
《C Primer Plus(第6版)中文版》一导读
C Primer Plus(第6版)中文版 1984年C Primer Plus 第1版刚问世时,使用C语言编程的人并不多。C语言从那时开始流行,许多人在本书的帮助下掌握了C语言。实际上,C Primer Plus 各个版本累计销售量已超过55万册。
2456 0