2

我正在玩在线 PDP11 仿真器(链接),并且正在查看其常见问题解答的编程部分。

它说明了在模拟器上用 C 语言编程:

您需要编写 pre-K&R C,这与现代 C 有很大不同

我相信这是指The C Programming Language出版之前使用的 C 版本。我试图通过阅读我可以在模拟器的文件系统中找到的稀疏 C 文件来理解这个版本,但即使是简单的事情,比如声明argcargv躲避我。我在网上也找不到任何关于它的信息。

在“pre-K&R”C 上是否有当时或事后编写的任何文档?

4

2 回答 2

6

对于这类问题,我的首选来源是已故丹尼斯·里奇 (Dennis Ritchie) 的存档网页:

https://www.bell-labs.com/usr/dmr/www/

从那里点击一下这个早期的 C 参考手册,由 Ritchie 自己编写:

https://www.bell-labs.com/usr/dmr/www/cman.pdf

这确实是“pre-K&R C”,具有时代错误,例如=+代替+=.

这与 K&R 书中的附录 A 以更新的形式出现的参考手册相同。

同一页面上还有指向该参考手册的其他几个版本的链接,以及关于Ritchie 编译器的两个早期版本的注释甚至源代码。这些看起来很有趣,尽管正如页面所述,“您将无法使用当今的编译器编译它们”。

有一个完整的 Stack Exchange 站点专门用于解决此类问题:https ://retrocomputing.stackexchange.com/ 。

于 2021-12-18T20:57:38.777 回答
2

Steve Summit 回答了从哪里获取文档。所以这篇文章旨在总结与现代 C 的显着差异

函数参数的类型完全不同。它们未在括号内指定

void foo(a, b)
    int a; 
    float b;
{
    // Function body
}

没有行评论,例如//. 仅有的/* */

没有逻辑orand。运营商&&并不||存在。使用按位运算符&|代替。

=-与 的意思相同-=,这会导致与 例如 的歧义x=-1

没有void指针。char而是使用了指针。

无法在 for 标头中声明变量,因此必须编写:

int i=0; 
for(i=0; i<N; ++i)

=仅用于分配而不是初始化。那些是这样完成的:int x 3;

隐式int的。这在现代 C 中仍然有效。不同之处在于没有(理智的)程序员不再使用它。这个:

foo 3;

实际上相当于

int foo = 3;

没有const预选赛

于 2021-12-18T22:56:05.307 回答