- ベストアンサー
localtime() 関数についての質問
C言語の勉強をして間もない者です。 time_t = current; struct tm = *local; time(¤t); local = localtime(¤t); こんなのがlocaltime関数を使った一般的なプログラムだと思いますが、なぜlocaltimeの引数がcurrentのポインタなのでしょうか? 別にcurrentには値を代入しないのだから、localtime(current)でもいいとおもうのですが、ポインタにした必然的理由があるのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1です。外していたみたいなので、再度検索。 #2の方のおっしゃる通り、歴史的な事情というのが正解みたいですね。 参考URLによると、UNIXの初期の頃に、下記の様に実装されていたのを 引きずってるということですね。 int *localtime(int tvec[2]); 今時のCPUなら、殆どが、32ビット以上の整数型を扱えるので、 上記の様な実装は、16ビットCPU時代の遺産ということでしょう。
その他の回答 (2)
- Tacosan
- ベストアンサー率23% (3656/15482)
time.h には他にも変なインターフェイスを持つ関数がいますし, なんとなく「過去からの遺産」以上の意味はないような気がします. ちなみに #1 の参考に挙げられている回答は完全に外していると言っていいと思います. C の仕様では, 型 time_t は算術型でなければなりません (従って構造体であることはありえない).
- knb-nkm
- ベストアンサー率66% (4/6)
私も気になったので調べてみました。 参考URLに、同様の質問がありました。回答の正否は分かりませんが... もし、time_t が構造体だったら、値で渡すとコピーするサイズが大きくなって 効率が落ちるので、ポインターで渡す必然性が出てきます。 今のところ、time_t を構造体にしている実装に出会った事はありませんが、 typedef で指定されているので、構造体として実装される可能性はあります。 標準関数のインターフェースを変更することは非常に望ましくないので、 構造体として実装される可能性の有る引数については、ポインターを渡すようにしている。 ということの様です。
お礼
回答ありがとうございます。 こんなページあるんですね。 英語の勉強しなくちゃ(´・ω・`)
お礼
回答ありがとうございます。 たしかにtime_t はlong型という説明は見たことがあります。