关于ANSI C的维基百科文章说:
ANSI C标准化过程的目标之一是生成K&R C(第一个发布的标准)的超集,其中包含随后引入的许多非官方特征.但是,标准委员会还包括一些新功能,例如函数原型(借用C++编程语言)和更强大的预处理器.参数声明的语法也已更改,以反映C++样式.
这让我觉得有差异.但是,我没有看到K&R C和ANSI C之间的比较.是否有这样的文件?如果没有,主要区别是什么?
编辑:我相信K&R书的封面上写着"ANSI C".至少我相信我在家里的版本确实如此.那么也许没有什么区别了?
关于"K&R C"是什么,这里可能存在一些混淆.该术语指的是第一版"C程序设计语言"中记录的语言.粗略地说:贝尔实验室C编译器的输入语言大约是1978年.
Kernighan和Ritchie参与了ANSI标准化过程."ANSI C"方言取代了"K&R C",后续版本的"C编程语言"采用ANSI惯例."K&R C"是一种"死语言",除非某些编译器仍然接受遗留代码.
功能原型是K&R C和C89之间最明显的变化,但还有很多其他的.许多重要的工作也用于标准化C库.尽管标准C库是对现有实践的编纂,但它编纂了多种现有实践,这使其更加困难.PJ Plauger的书,标准C库,是一个很好的参考,并且还讲述了为什么图书馆以它的方式结束的幕后细节.
ANSI/ISO标准C在很多方面与K&R C非常相似.它的目的是大多数现有的C代码应该在ANSI编译器上构建而不需要很多更改.然而,至关重要的是,在预标准时代,语言的语义可供每个编译器供应商解释.ANSI C引入了语言语义的通用描述,使所有编译器处于平等的地位.现在,大约20年后,这很容易被视为理所当然,但这是一项重大成就.
在大多数情况下,如果您没有预先标准的C代码库来维护,您应该很高兴您不必担心它.如果你这样做 - 或者更糟糕的是,如果你想把一个旧的程序带到更现代的标准 - 那么你会有我的同情心.
虽然有一些细微的差别,但我认为K&R的后期版本适用于ANSI C,因此不再存在真正的差异.
由于缺乏更好的术语,"C Classic"的定义函数的方式略有不同,即
int f( p, q, r ) int p, float q, double r; { // Code goes here }
我相信另一个区别是功能原型.原型不必 - 实际上他们不能 - 采取一系列参数或类型.在ANSI C中他们这样做.
功能原型.
常量和挥发性限定符.
广泛的人格支持和国际化.
允许函数指针在没有解除引用的情况下使用.