有没有pre-K&R c的文档?

Is there any documentation for pre-K&R c?

我正在玩在线 PDP11 模拟器 (link) and was looking at the programming section of its FAQ

关于在模拟器上用 C 语言编程是这样说的:

You need to write pre-K&R C which is quite a bit different from modern C

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

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

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

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

从那里只需单击一下 Ritchie 自己编写的早期 C 语言参考手册:

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

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

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

在同一页上有指向该参考手册其他几个版本的链接,以及关于 two early versions of Ritchie's compiler 的注释甚至源代码。这些看起来非常有趣,尽管正如该页面所指出的那样,“您将无法使用今天的编译器来编译它们”。

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

Steve Summit 回答了有关从何处获取文档的问题。所以这个 post 旨在总结与现代 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 限定符