ISO C/POSIX time() にオプションのポインタ引数がある理由

ISO C/POSIX time() にオプションのポインタ引数がある理由

ISO C/POSIX発表する次の機能time()

time_t time(time_t *tloc);

文書には次のように記載されています。

time() 関数は、epoch 以降の時間値を秒単位で返す必要があります。

tlocパラメーターは戻り値も格納される領域を指します。 tloc がヌルポインタの場合、値は保存されません。

なぜ人々が最初に戻り値と「出力」パラメータの両方を持つようにAPIを設計するのか理解していません。そのようなデザインの妥当な理由はありますか、それとも歴史的に発展してきましたか?

time()従来はoutパラメータ()のみを持っていましたが、以前のバージョンとの互換性のために値を返し、最初のパラメータを保持するように変更したvoid time(time_t *)関数はありましたか?time_t

それとも戻り値のサイズがfitに制限され、time_tポインタを必要とするシステムはありますか?

答え1

longしたがって、MC68020がコメントで述べたように、Cには当時の型はなく、私が見つけることができる最も古い型はライブラリ/time.sUnixの2番目のバージョンであるこのファイルの日付は1972-06-07で、次のソース(PDP-11アセンブリ)から上にリンクされているWebサイトにあります。

/ C library -- time

/ tvec = time(tvec);
/
/ tvec[0], tvec[1] contain the time

    .globl  _time

.data
_time:
    1f
.text
1:
    mov 2(sp),r0
    sys time
    mov ac,(r0)
    mov mq,2(r0)
    rts pc

興味深いことに、16ビット値の一種の2要素配列を想定すると、常に戻り値(tvec = time(tvec);)があるようです(対応する割り当てが関連している場合)。tvec

関連情報