《C专家编程》一1.5 今日之ANSI C

1.5 今日之ANSI C

到了20世纪80年代初,C语言被业界广泛使用,但存在许多不同的实现和差别。PC的实现者发现了C语言优于BASIC的诸多长处,这一发现更是掀起了C语言的高潮。Mirosoft为IBM PC制作了一个C编译器,引入了几个新的关键字(far, near等)帮助指针处理Intel 80x86芯片不规则的架构。随着其他更多并非基于pcc的编译器的兴起,C语言受到了重复BASIC老路的威胁,也就是可能变成一种多个变种松散相关的语言。

形势渐渐明了,一个正式的语言标准是必需的。幸运的是,在这个领域已经有了相当多的先行者——所有成功的编程语言最终都作了标准化。然而,编写标准手册所存在的问题是:只有当你明白它们讲的是什么,那才是可行的。如果人们用日常语言来编写它们,越想把它们写得精确,就越可能使它们变得冗长、乏味且晦涩。如果用数学概念来定义语言,那么标准手册对于大多数人而言不啻于天书。

多年以来,用于定义编程语言标准的手册变得越来越长,但也越来越容易理解。Algol-60就语言复杂性而言,与C语言不相上下,但它的标准手册——Algol-60 Reference Definition只有18页。Pascal用了35页来描述。Kernighan和Ritchie所作的C语言最初报告用了40页,尽管漏掉了一些东西,但对于许多编译器设计者而言,这些已经足够了。定义ANSI C的手册超过了200页。它部分地对C语言的实际应用作了描述,是对标准文档中有些晦涩文字的补充和说明。

1983年,美国国家标准化组织(ANSI)成立了C语言工作小组,开始了C语言的标准化工作。小组所处理的主要事务是确认C语言的常用特性,但对语言本身也作了一些修改,并引入一些有意义的新特性。对于是否要接受near和far关键字,小组内部进行了旷日持久的争论。最终,它们还是没有被纳入以UNIX为中心的相对谨慎的ANSI C标准。尽管当时世界上大约有5000万台PC,而且它是当时应用范围最广的C语言实现平台,但标准仍然认为(我们认为这是对的)不应该通过修改语言来处理某个特定平台所存在的限制。

该用哪个版本的C语言呢?

就此而论,任何学习或使用C语言的人都应当使用ANSI C,而不是K&R C。
1989年12月,C语言标准草案最终被ANSI委员会接纳。随后,国际标准化组织ISO也接纳了ANSI C标准(令人不快的是,它删除了非常有用的“Rationale”一节,并作了个虽然很小却让人很恼火的修改,就是把文档的格式和段落编码作了改动)。ISO是一个国际性组织,从技术上讲它更权威一些。所以在1990年初,ANSI重新采纳了ISO C(同样删除了Rationale),取代了原先的版本。因此从原则上说,ANSI所采纳的C语言标准是ISO C,我们日常所说的标准C也应该是ISO C。Rationale这一节是非常有用的,能极大地帮助人们理解标准,它后来作为独立的文档出版。[4]

哪里能得到C语言标准的一份拷贝

C语言标准的官方名称是:ISO/IEC 9899:1990。ISO/IEC是指国际标准化组织和国际电工组织。标准组织定价$130.00出售C语言标准。在美国,你可以通过给下面的地址写信来获取一份标准的拷贝:

American National Standards Institute

11 West 42ndStreet

New York, NY 10036

Tel.(212)642-4900

在美国以外的地区,你可以向下面的地址写信求购:

ISO Sales

Case postale 56

CH-1211 Genève 20

Switzerland

要指明自己想要的是英语版本。

另一个办法是购买Herbert Schildt所著的The Anootated ANSI C Standard(纽约,Osborne McGraw-Hill,1993)。这本书包含一个压缩了版面,但内容完整的C语言标准。Herbert Schildt的书有两个优势,首先是价格,$39.95的定价不到标准定价的三分之一。其次,不像ANSI或ISO,它可能在你当地的书店里就有售,你可以利用20世纪的先进手段,通过电话订购和信用卡支付。
实际上,在ISO成立第14工作小组(WG14)制定C标准之前,“ANSI C”这个称呼就已被广泛使用。这并没有什么不妥,因为ISO工作小组把最初标准的技术性完善工作留给了ANSI X3J11委员会。在工作接近尾声时,ISO WG14和X3J11一起通力协作,敲定技术细节并确保最终的标准能被两个组织共同接受。事实上,标准的最终形成又推迟了一年,主要是为了修改标准草案以覆盖一些国际化的问题如宽字符和国际区域问题。

这就使得所有几年来一直关心C语言标准的人们将新的标准当成是ANSI C标准。当语言标准最终形成后,所有人都想支持C语言标准。ANSI C同时是一个欧洲标准(CEN 29899)和X/Open标准。ANSI C被采纳为Federal Information Processing Standard(联邦信息处理标准),取名FIPS160,由国家标准和技术局于1991年3月发布,并于1992年8月24日更新。在C语言上的工作仍在继续——据说有可能在C语言中增加复数类型。

时间: 2024-10-24 08:37:14

《C专家编程》一1.5 今日之ANSI C的相关文章

《C专家编程》一1.8 ANSI C标准的结构

1.8 ANSI C标准的结构 如果我们岔开话题,快速浏览一下ANSI C标准的出处和内容,对读者应该是有帮助的.ANSI C标准分成四个主要的部分: 第4节:介绍(共5页).对术语进行介绍和定义. 第5节:环境(共13页).描述了围绕和支持C语言的系统,包括在程序启动时发生什么,程序中止时发生什么,以及一些信号和浮点数运算.编译器的最低限制和字符集信息也在这一部分介绍. 第6节:C语言(共78页).标准的这部分是基于Dennis Ritchie数次出版的经典之作"The C Reference

《C专家编程》一导读

前 言 C专家编程 C代码.C代码运行.运行码运行-请! --Barbara Ling 所有的C程序都做同一件事,观察一个字符,然后啥也不干. --Peter Weinberger 你是否注意到市面上存有大量的C语言编程书籍,它们的书名具有一定的启示性,如:C Traps and Pitfalls(本书中文版<C陷阱与缺陷>已由人民邮电出版社出版), The C Puzzle Book, Obfuscated C and Other Mysteries,而其他的编程语言好像没有这类书.这里有一

《JavaScript专家编程》——9.4 度量JavaScript代码质量

9.4 度量JavaScript代码质量 为了让计算精度上升到最高,客观质量分析以程序化的方式对代码进行分析.这项任务可以使用编程工具完成,这些工具能够在多种情况下评估代码,根据各项指标得到最终的质量得分.本节介绍了静态代码分析,这种方法非常适合评估JavaScript的质量. 静态代码分析 静态代码分析就是不通过运行代码来分析代码的过程.静态分析看起来非常像一个文本编辑器的拼写检查器.拼写检查器扫描文档的正文来寻找错误和含糊之处,而并不需要了解文本的意义.同时,静态代码分析从功能上分析源代码的

C专家编程 笔记

C语言中的符号重载 C语言非常的简洁, 以至于不愿意用太多的符号, 这样有很多符号在不同的地方有不同的含义 这样会让用户很困惑, 这是c的语言特性, 也是设计上的一些失误 static     在函数内部,表示该变量的值在各个调用间一直保持延续性: 对于函数,表示该函数只在本文件中可见 extern  用于变量,表示该变量在其它地方定义: 用于函数定义, 表示全局可见(属于冗余的) void      用于参数列表中,表示该函数参数为空,如int main(void): 用于返回值,表示该函数返

《JavaScript专家编程》——1.2 对象概述

1.2 对象概述 JavaScript是由Brendan Eich创建的一种面向对象编程(OOP)语言,当时他还在Netscape公司工作,花了几周的开发时间就发布了.虽然JavaScript的名字中有个"Java",但它实际上跟Java语言没什么关系.在InfoWorld的一篇对Eich的采访稿中,他解释了JavaScript命名的由来: InfoWorld:据我所知,JavaScript开始的时候叫Mocha,后来改名叫LiveScript,在 Netscape和Sun合并以后才叫

《JavaScript专家编程》——1.3 小结

1.3 小结 对象是持有零个或多个属性的包. 对象的属性要么是基本类型,要么是复杂类型.对象可以持有它们自己的基本类型的拷贝,但仅能持有复杂类型的引用.出于这个原因,JavaScript的属性要么传引用,要么传值. 对象的属性可以有标记符,可以在修改对象时,控制对象的行为和能力. 对象可以通过以下三种方式之一创建. 使用字面量语法'{}'. 联合使用new运算符和构造函数,例如'new Foo()'. 使用内置的Object.create()函数. JavaScript是一种基于原型的语言,对象

《JavaScript专家编程》——第1章 对象和原型 1.1鸟瞰JavaScript

第1章 对象和原型 练习不会造就完美,只有使用最佳的方法来练习才能造就完美. --Vince Lombardi 对专家来说,把JavaScript的核心概念讲上3章似乎有点多,毕竟这些是语言最基本的组成部分.我的主张是,有的人虽然不能读写,但可以说话.就像有的开发人员对JavaScript的基本功能很熟悉,但对里面那些复杂的东西可能就没那么了解了. 本书的目标是像明灯一样照亮语言中那些晦涩的角落.里面包含的很多概念你可能已经试着学习过了,甚至可以假设你已经理解了.这里可以想象一下:你正降落到你大

《JavaScript专家编程》——9.5 小结

9.5 小结 本章介绍了JavaScript代码质量的必要性及其原因.一个程序的质量往往会影响程序员维护.改进甚至是否有能力完全了解源代码.质量差的代码通常被称为技术债,剥夺了项目的时间和资源,而这些时间和资源用在其他地方能更好地发挥作用.然而,编程往往是一门跨越了艺术和科学之间的学科,这使得对质量的定义变的更为复杂.而且,质量又是从主观和客观上的双重度量. 有这样一种观点认为,一个人所在时代的文化,以及他们的个人经历都会对质量产生影响.这种观点将质量描述为具有"内在卓越"的东西,只有

《JavaScript专家编程》——导读

**前言**在我看来,好的技术书籍是磁带.藏宝图和现场札记内容的混合体.本书就是我灌注了很多心血而将这些不同形式融为一体的一本书. 老一辈的人还记得,磁带内容是由很多歌曲组成的.这些磁带经常被作为礼物送给朋友.恋人.人们会挑选一些个人喜欢的歌,或者围绕某个主题组织在一起的歌,录入这盘磁带中.通常,当听磁带的人听到这些歌时,这些歌就会勾起人们对录制者的记忆.这本书就是一盘我录给你们的JavaScript方面的磁带.这些章节包括JavaScript中我喜欢的一些方面,也包括不容易被理解的主题,因为这