2012-12-13 40 views
17

私はtime_t - varEnd型とvarStart型の2つの変数を持っています。 今それら どちらかの違いを見るために私がdifftimeと ' - 'の違いは何ですか?

varEnd - varStart; 

または

difftime(varEnd, varStart); 

を行うことができますし、両方の秒数を返します。

違いがある場合はお知らせください。または推奨されているのはどれですか?

+2

なぜこれは 'C++'とタグ付けされていますか? –

+0

@PaulR: 'difftime()'はCとC++の両方に存在します。 –

+1

これはおそらくPascalまたはFORTRANという形で呼ぶこともできますが、これはPascalまたはFORTRANの質問にはなりません。 ;) –

答えて

27

言語では、time_tが時刻を表現できる算術型であることを指定しています。特定の方法で時間を表現する必要はありません。

time_tがある時刻からの秒数を表す場合、-オペレータは、2つのtime_t値の間の差を正しく計算します。

粒度が1ミリ秒である場合、またはtime_tのビットが年、月、日などを表すグループに分割されている場合、演算子-は無意味な結果をもたらす可能性があります。

一方、difftime()関数は、time_tが時間をどのように表しているかを「知って」おり、その情報を使用してその差を秒単位で計算します。ほとんどの実装、単純な引き算とdifftime()

は同じことを行うために起こる - だけdifftime()すべて実装で正常に動作することが保証されています。

別差:"-"time_t上の値はタイプtime_tの結果が得られるが、浮動小数点型doubleの結果を返しdifftime()。ほとんどの場合、結果は暗黙のうちにあなたが代入したものの型に変換されますが、time_tが符号なし整数型である場合、前の時刻から後の時刻を減算すると、負の値ではなく非常に大きな値が得られます。私が見たすべてのシステムでは、time_tを32ビットまたは64ビットの符号付き整数型として実装していますが、符号なしの型を使用することができます。つまり、time_t値の単純減算は意味がありません。

1

difftime()は浮動小数点doubleを返しますが、doubleを最初にdoubleにキャストしない限り、それらを減算するだけです。
ソース:here

+0

はい、両方の 'time_t'オペランドを' double'に変換しても、それらを減算する前に 'difftime'と同じことをすることは保証されません。これが' difftime'が存在する理由です。私の答えを見てください。 –

関連する問題