当前位置:  开发笔记 > 编程语言 > 正文

ANSI C和K&R C之间的主要区别是什么?

如何解决《ANSIC和K&RC之间的主要区别是什么?》经验,为你挑选了4个好方法。

关于ANSI C的维基百科文章说:

ANSI C标准化过程的目标之一是生成K&R C(第一个发布的标准)的超集,其中包含随后引入的许多非官方特征.但是,标准委员会还包括一些新功能,例如函数原型(借用C++编程语言)和更强大的预处理器.参数声明的语法也已更改,以反映C++样式.

这让我觉得有差异.但是,我没有看到K&R C和ANSI C之间的比较.是否有这样的文件?如果没有,主要区别是什么?

编辑:我相信K&R书的封面上写着"ANSI C".至少我相信我在家里的版本确实如此.那么也许没有什么区别了?



1> Chris Conway..:

关于"K&R C"是什么,这里可能存在一些混淆.该术语指的是第一版"C程序设计语言"中记录的语言.粗略地说:贝尔实验室C编译器的输入语言大约是1978年.

Kernighan和Ritchie参与了ANSI标准化过程."ANSI C"方言取代了"K&R C",后续版本的"C编程语言"采用ANSI惯例."K&R C"是一种"死语言",除非某些编译器仍然接受遗留代码.


第一版K&R于1978年出版.C语言在1969年至1978年间发生了很大变化.

2> 小智..:

功能原型是K&R C和C89之间最明显的变化,但还有很多其他的.许多重要的工作也用于标准化C库.尽管标准C库是对现有实践的编纂,但它编纂了多种现有实践,这使其更加困难.PJ Plauger的书,标准C库,是一个很好的参考,并且还讲述了为什么图书馆以它的方式结束的幕后细节.

ANSI/ISO标准C在很多方面与K&R C非常相似.它的目的是大多数现有的C代码应该在ANSI编译器上构建而不需要很多更改.然而,至关重要的是,在预标准时代,语言的语义可供每个编译器供应商解释.ANSI C引入了语言语义的通用描述,使所有编译器处于平等的地位.现在,大约20年后,这很容易被视为理所当然,但这是一项重大成就.

在大多数情况下,如果您没有预先标准的C代码库来维护,您应该很高兴您不必担心它.如果你这样做 - 或者更糟糕的是,如果你想把一个旧的程序带到更现代的标准 - 那么你会有我的同情心.



3> FreeMemory..:

虽然有一些细微的差别,但我认为K&R的后期版本适用于ANSI C,因此不再存在真正的差异.
由于缺乏更好的术语,"C Classic"的定义函数的方式略有不同,即

int f( p, q, r )  
int p, float q, double r;  
{  
    // Code goes here  
}

我相信另一个区别是功能原型.原型不必 - 实际上他们不能 - 采取一系列参数或类型.在ANSI C中他们这样做.


严格地说,根据定义,"prototype"是具有显式类型参数的函数声明.那些旧的K&R风格的声明是*不是*原型.
这不是有效的K&R :)它会去`int p; 漂浮q; double r;`或`int p,q,r;`

4> 小智..:

    功能原型.

    常量和挥发性限定符.

    广泛的人格支持和国际化.

    允许函数指针在没有解除引用的情况下使用.

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有