如果你不理解C语言标准的价值,你就不会知道你是怎样地幸运。
一个C程序员会期望一个C程序无论是在哪里开发的,在另一个编译程序中都能通过编译。实际上不能完全做到这一点,因为许多头文件和函数库都是针对某些特定的编译程序或平台的。有些(很少!)语言扩充性能,例如基于Intel的编译程序所使用的near和far关键字以及寄存器伪变量,也只不过是某种平台的开发商们所认可的一种标准。
如果你认为靠一种标准走遍天下是理所当然的,就象左脚踩加速器,右脚踩刹车一样,那么你的视野未免有些狭窄。有两种不同的BASIC标准,但都没有得到广泛的支持;世界上最流行的Pascal编译程序并不符合正式的标准;现在正在发展的C++标准,由于变化太快,也没有得到广泛的支持;有些实现遵循一种严格的Ada标准,但Ada标准也没能大规模地占领世界市场。
从技术上讲有两种C语言标准,一种来自ANSI(American National Standard Institute,美国国家标准协会)X3J11委员会,另一种来自ISO(International Standard Organization,国际标准协会)9899—1990。由于ISO标准中的某些改进优于ANSI标准,而ANSI标准也接受了这个国际版本,因此"ANSI/ISO标准”是一种正确的说法。
那么,这种标准对你有什么帮助呢?你可以买到一份该标准的副本,即Herbert Schildt所著的((The Annotated ANSI C Standard》(Osborne McGraw-Hill出版,ISBN O-07-881952-O)一书,该书对语言和库都作了介绍,并带有注释。这本书比大多数正式标准要便宜多了,后者由ANSI和ISO出售,以解决建立标准所需的部分费用。并不是每一个C程序员都需要这样一本书,但它是最权威的。
最重要的一点是,ANSI/ISO标准是对“什么是c?”这一问题的权威解答。如果编译程序开发商所做的某些实现不符合这一标准,你可以把它作为错误指出来,这不会引起争论。
ANSI/ISO标准也不是包罗万象的。具体地说,它没有涉及c程序可能会做的许多有趣的事情,例如图形或多任务。许多兼容性不强的标准包含了这些内容,其中的一些将来可能会成为权威的标准,因此你不必完全拘泥于ANSI/ISO标准。
顺便提一句,除编程语言之外,还有许多东西也有ANSI标准,其中的一种就是ANSI为全屏幕文本操作的退出序列集合而写的标准,在第17章中所介绍的MS—DOS的"ANSI驱动程序”指的就是这种标准(有趣的是,MS-DOS的ANSI.SYS只实现了ANSI标准序列中的一小部分)。