UNIX v7 中没有 stdlib?

UNIX v7 中没有 stdlib?

正在浏览v7 UNIX 源代码我注意到没有“stdlib”目录 - 进一步使用 v7 UNIX 模拟器,没有<stdlib.h>.然而,像exit()和一样的函数malloc(), realloc(), free() .etc.都存在于 v7 UNIX 中。另外,c89 (ANSI)肯定有一个,<stdlib.h>因为它出现在K&R ANSI Edition.Google-ing 后的几个小时内,我转向 SE :)

所以我的问题是:<stdlib.h>c中第一次正式使用是什么时候?它的历史是什么(即它被 BSD 使用,然后被包含到c89

谢谢。

答案1

c89 标准是值得关注的地方;它是理由单独发布(不是标准的一部分)。stdlib.h是由致力于该标准的委员会创建的,而不是反映现有的实践。这X3J11原理说:

标头<stdlib.h>是委员会发明的,用于举办各种原本无家可归的活动。

旧程序有 ifdef 用于包含, ,而不是其他地方,stdlib.h例如memory.hfor等。memcpymalloc

这并不是说在标准发布之前,曾是stdlib.h。例如,我的一张纸条中有一张纸条头文件声明 VMS 5.3(已发布)1989年6月) 有stdlib.h

#if defined(vms)        /* VAX/VMS 5.3 */
#define HAVE_STDLIB_H 1
#define HAVE_STDARG_H 1
#undef  HAVE_UNISTD_H
#define HAVE_OLD_TOKEN_SPLICE 1
#define HAVE_OLD_TOKEN_QUOTE  1
#endif

相反,参与标准开发的公司随着标准的进展纳入了这些功能,因此当标准制定时曾是发布后,它反映了现有的做法。

在同一个标​​头(及其历史)中,我可以看到 SVr3 没有stdlib.h(指 Apollo 的svr5.5环境),但它“后来”出现(可能与 SVr4 一起出现,它与 c89 标准大约在同一时间开发) 。

关于 BSD 的观点,我可以看到它在 1990 年出现在 4.3reno 中(太晚了,不相关)。同样,很容易找到这样的评论:SunOS 4 是 ANSI 之前的版本(尽管我记得添加了一个 ANSI 编译器作为选项在此过程中相当晚)。因此,让我们忽略 BSD 对这个标头的影响,而将其保留为参与标准开发的公司。

就其价值而言,其基本原理提到了 AT&T 和 Digital Equipment Corporation 的商标。

相关内容