web-dev-qa-db-ja.com

UNIX v7にstdlibはありませんか?

v7 UNIX Sources を参照すると、「stdlib」ディレクトリがないことに気付きました。さらにv7 UNIXエミュレータを使用すると、_<stdlib.h>_などのファイルがありません。ただし、exit()malloc(), realloc(), free() .etc.などの関数はすべてv7UNIXに存在します。また、c89 (ANSI)によって、間違いなく_<stdlib.h>_がありました。これは_K&R ANSI Edition._に存在するためです。何時間もGoogleを使用した後、SEに目を向けます:)

だから私の質問は:_<stdlib.h>_が最初にcで公式に使用されたのはいつですか?それはどのような歴史ですか(つまり、BSDで使用され、後で_c89_に含まれていましたか?

ありがとうございました。

3
Ankush

C89標準は見るべき場所です。その rationale は個別に公開されました(標準の一部ではありません)。 stdlib.hは、既存の慣行を反映するのではなく、標準に取り組む委員会の創設でした。 X3J11の理論的根拠 は次のように述べています。

ヘッダー<stdlib.h>は、他の方法ではホームレスであったさまざまな機能を保持するために委員会によって発明されました。

古いプログラムには、stdlib.hを含めるためのifdefがありますが、memcpymallocなどのmemory.hなどの他の場所とは異なります。

これは、標準が公開されるまで、no stdlib.hであったことを意味するものではありません。たとえば、私の ヘッダーファイル の1つに、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 EquipmentCorporationの商標に言及しています。

3
Thomas Dickey