2

の有効な値の範囲を見つけるのは非常に難しいようですtime_t

一部のプラットフォームでは 32 ビットですが、ほとんどの 64 ビットでは、簡単に に設定できますLONG_MAX。ただし、その値を使用しようとすると、実際には正しく機能しません。たとえば、それをに渡してにlocaltime変更することはできませんstruct tm

二分探索の簡単なテスト プログラムは、値が 67768036191676799 であることを教えてくれます。これは 2147483647 年末に相当するので、値としては理にかなっています。しかし、これはどこかで指定されていますか? また、使用可能な最大 time_t の妥当な、プラットフォームに依存しない値はありますか?

4

3 に答える 3

1

実際、time_tとclock_tの仕様は、実装で定義されています(C997.23.1)。

これは、これらの値を自分で生成するのではなく、のように実装に依存して作成し、時間を直接操作するためにmktime()使用することをお勧めするものの1つです。自分で使用できる「適切な」値であるtime_tの唯一の値です。struct tm-1

jgmが示唆しているように、これをどのタイプの32ビット値としても扱わないことを特にお勧めします。奇妙な組み込みコンパイラが16ビット時間または18ビット時間を使用したいかどうか、または誰が知っているかはわかりません。

于 2013-02-07T17:37:42.637 に答える
0

tm_yearの型intは であるため、 に変換するstruct tm場合、最も意味time_tのある値は year に対応する値INT_MAXです。

于 2013-02-07T17:47:47.617 に答える
0

これを使用する最も安全な方法は、25 年後に動作しないことに満足している限り、32 ビット署名として使用することです。

それ以外の場合は、実行しているプラ​​ットフォームで型を自分でテストし、それに応じて行動する必要があります。

于 2013-02-07T17:27:40.303 に答える