正在浏览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.h
for等。memcpy
malloc
这并不是说在标准发布之前,曾是不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 的商标。