Chr*_*way 29
关于"K&R C"是什么,这里可能存在一些混淆.该术语指的是第一版"C程序设计语言"中记录的语言.粗略地说:贝尔实验室C编译器的输入语言大约是1978年.
Kernighan和Ritchie参与了ANSI标准化过程."ANSI C"方言取代了"K&R C",后续版本的"C编程语言"采用ANSI惯例."K&R C"是一种"死语言",除非某些编译器仍然接受遗留代码.
小智 16
功能原型是K&R C和C89之间最明显的变化,但还有很多其他的.许多重要的工作也用于标准化C库.尽管标准C库是对现有实践的编纂,但它编纂了多种现有实践,这使其更加困难.PJ Plauger的书,标准C库,是一个很好的参考,并且还讲述了为什么图书馆以它的方式结束的幕后细节.
ANSI/ISO标准C在很多方面与K&R C非常相似.它的目的是大多数现有的C代码应该在ANSI编译器上构建而不需要很多更改.然而,至关重要的是,在预标准时代,语言的语义可供每个编译器供应商解释.ANSI C引入了语言语义的通用描述,使所有编译器处于平等的地位.现在,大约20年后,这很容易被视为理所当然,但这是一项重大成就.
在大多数情况下,如果您没有预先标准的C代码库来维护,您应该很高兴您不必担心它.如果你这样做 - 或者更糟糕的是,如果你想把一个旧的程序带到更现代的标准 - 那么你会有我的同情心.
Fre*_*ory 12
虽然有一些细微的差别,但我认为K&R的后期版本适用于ANSI C,因此不再存在真正的差异.
由于缺乏更好的术语,"C Classic"的定义函数的方式略有不同,即
int f( p, q, r )
int p, float q, double r;
{
// Code goes here
}
Run Code Online (Sandbox Code Playgroud)
我相信另一个区别是功能原型.原型不必 - 实际上他们不能 - 采取一系列参数或类型.在ANSI C中他们这样做.