C

UNIX v7 中沒有標準庫?

  • March 19, 2016

瀏覽v7 UNIX 源程式碼時,我注意到沒有“stdlib”目錄——進一步使用 v7 UNIX 模擬器,沒有<stdlib.h>. 然而,類似exit()and malloc(), 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.hformemcpymalloc

這並不是說在標準發布之前*,*沒有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 的商標。

引用自:https://unix.stackexchange.com/questions/270840