有没有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 文件来理解这个版本,但即使是像声明 argc
和 argv
这样简单的事情也让我望而却步。我在网上也找不到任何相关信息。
是否有任何关于“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
}
没有行注释,例如 //
。只有 /* */
没有逻辑 or
和 and
。运算符 &&
和 ||
不存在。而是使用按位运算符 &
和 |
。
=-
与 -=
的含义相同,这会导致歧义,例如 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
限定符
我正在玩在线 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 文件来理解这个版本,但即使是像声明 argc
和 argv
这样简单的事情也让我望而却步。我在网上也找不到任何相关信息。
是否有任何关于“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
}
没有行注释,例如 //
。只有 /* */
没有逻辑 or
和 and
。运算符 &&
和 ||
不存在。而是使用按位运算符 &
和 |
。
=-
与 -=
的含义相同,这会导致歧义,例如 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
限定符