私はtime_t - varEnd型とvarStart型の2つの変数を持っています。 今それら どちらかの違いを見るために私がdifftimeと ' - 'の違いは何ですか?
varEnd - varStart;
または
difftime(varEnd, varStart);
を行うことができますし、両方の秒数を返します。
違いがある場合はお知らせください。または推奨されているのはどれですか?
私はtime_t - varEnd型とvarStart型の2つの変数を持っています。 今それら どちらかの違いを見るために私がdifftimeと ' - 'の違いは何ですか?
varEnd - varStart;
または
difftime(varEnd, varStart);
を行うことができますし、両方の秒数を返します。
違いがある場合はお知らせください。または推奨されているのはどれですか?
言語では、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
値の単純減算は意味がありません。
difftime()は浮動小数点doubleを返しますが、doubleを最初にdoubleにキャストしない限り、それらを減算するだけです。
ソース:here
はい、両方の 'time_t'オペランドを' double'に変換しても、それらを減算する前に 'difftime'と同じことをすることは保証されません。これが' difftime'が存在する理由です。私の答えを見てください。 –
なぜこれは 'C++'とタグ付けされていますか? –
@PaulR: 'difftime()'はCとC++の両方に存在します。 –
これはおそらくPascalまたはFORTRANという形で呼ぶこともできますが、これはPascalまたはFORTRANの質問にはなりません。 ;) –