UNIX v7 中沒有標準庫?
瀏覽v7 UNIX 源程式碼時,我注意到沒有“stdlib”目錄——進一步使用 v7 UNIX 模擬器,沒有
<stdlib.h>
. 然而,類似exit()
andmalloc(), realloc(), free() .etc.
all 的函式都存在於 v7 UNIX 中。另外c89 (ANSI)
肯定有一個<stdlib.h>
,因為它出現在K&R ANSI Edition.
經過數小時的Google搜尋後,我轉向 SE :)**所以我的問題是:**什麼時候
<stdlib.h>
第一次在 c 中正式使用?它的歷史是什麼(即它被 BSD 使用,然後被包含在c89
?謝謝你。
c89 標準是值得一看的地方;它的基本原理是單獨發布的(並且不是標準的一部分)。
stdlib.h
是委員會創建的標準,而不是反映現有的做法。X3J11的理由是:標頭
<stdlib.h>
是委員會發明的,用於舉行各種無家可歸的職能。舊程序有 ifdef 用於包含
stdlib.h
, 與其他地方,如memory.h
formemcpy
等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 是 pre-ANSI 的註釋(儘管我記得在此過程中很晚才添加了一個 ANSI 編譯器作為*選項)。*因此,讓我們忽略 BSD 對這個標頭的影響,而將其留給參與標准開發的公司。
值得一提的是,理由提到了 AT&T 和 Digital Equipment Corporation 的商標。