time_t型の2つの変数(varEndとvarStart)があります。今、それらの違いを見るためにどちらか私はすることができます
varEnd - varStart;
また
difftime(varEnd, varStart);
両方とも秒数を返します。
違いがあれば教えてください。またはどちらが推奨されますか?
言語は、それtime_t
が時間を表すことができる算術型であることを指定します。特定の方法で時間を表す必要はありません。
time_t
ある瞬間からの秒数として時間を表す場合、-
オペレーターは2つの値の秒単位の差を正しく計算しtime_t
ます。
そうでない場合(たとえば、粒度が1ミリ秒の場合、またはaのビットがtime_t
年、月、日などを表すグループに分割されている場合)、-
演算子は無意味な結果を生成する可能性があります。
difftime()
一方、この関数は、aがどのようtime_t
に時間を表すかを「認識」し、その情報を使用して秒単位の差を計算します。
ほとんどの実装では、単純な減算と同じことを実行しますが、すべての実装で正しく機能することが保証されているdifftime()
だけです。difftime()
別の違い:difftime()
浮動小数点型の結果を返しますが、double
on"-"
のtime_t
値は型の結果を返しますtime_t
。ほとんどの場合、結果は割り当てられたタイプに暗黙的に変換されますtime_t
が、符号なし整数タイプの場合は、前の時間から後の時間を減算すると、負の値ではなく非常に大きな値が生成されます。私が見たすべてのシステムはtime_t
、32ビットまたは64ビットの符号付き整数型として実装されていますが、符号なし型の使用は許可されてtime_t
います。値の単純な減算が必ずしも意味のあるものではないもう1つの理由です。
difftime()は浮動小数点doubleを返しますが、最初にdoubleにキャストしない限り、それらを減算しても返されません。
ソース:ここ