22

time_t型の2つの変数(varEndとvarStart)があります。今、それらの違いを見るためにどちらか私はすることができます

varEnd - varStart; 

また

difftime(varEnd, varStart);

両方とも秒数を返します。

違いがあれば教えてください。またはどちらが推奨されますか?

4

2 に答える 2

35

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

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

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

difftime()一方、この関数は、aがどのようtime_tに時間を表すかを「認識」し、その情報を使用して秒単位の差を計算します。

ほとんどの実装では、単純な減算と同じことを実行しますが、すべての実装で正しく機能することが保証されているdifftime()だけです。difftime()

別の違い:difftime()浮動小数点型の結果を返しますが、doubleon"-"time_t値は型の結果を返しますtime_t。ほとんどの場合、結果は割り当てられたタイプに暗黙的に変換されますtime_tが、符号なし整数タイプの場合は、前の時間から後の時間を減算すると、負の値ではなく非常に大きな値が生成されます。私が見たすべてのシステムはtime_t、32ビットまたは64ビットの符号付き整数型として実装されていますが、符号なし型の使用は許可されてtime_tいます。値の単純な減算が必ずしも意味のあるものではないもう1つの理由です。

于 2012-12-13T08:39:14.887 に答える
2

difftime()は浮動小数点doubleを返しますが、最初にdoubleにキャストしない限り、それらを減算しても返されません。
ソース:ここ

于 2012-12-13T08:37:14.027 に答える