いくつかの基本的なC関数について学び、いくつかのマニュアルでtime(NULL)
に遭遇しました。
これはどういう意味ですか?
time
が現在の時間で満たすtime_t
オブジェクトへのポインターを渡すことができます(戻り値は指定したものと同じです)。 NULL
を渡すと、それは無視され、現在の時刻を表す新しいtime_t
オブジェクトが返されるだけです。
time()
は非常に古い関数です。 C言語のタイプがlong
でさえなかった時代にさかのぼります。むかしむかし、32ビット型のようなものを取得する唯一の方法は、2つのint
sの配列を使用することでした-int
sが16ビットだったときでした。
だからあなたは電話した
_int now[2];
time(now);
_
そして、32ビット時間を_now[0]
_および_now[1]
_に一度に16ビットで埋めました。 (これは、localtime
やctime
などの他の時間関連関数が、ポインターを介して時間引数を受け入れる傾向がある理由を説明しています。)
後で、 dmr はlong
をコンパイラに追加し終えたので、言い始めることができます
_long now;
time(&now);
_
後になって、誰かがtime()
がポインタを介して値を入力するのではなく、先に進んで値を返すと便利だと気づきました。しかし、後方互換性は素晴らしいことです。まだtime(&now)
を実行しているすべてのコードの利益のために、time()
関数はポインター引数をサポートし続ける必要がありました。戻り値を使用している場合は、これが後方互換性が必ずしもそれほど素晴らしいものではない理由です-ポインターとしてNULLを渡す必要があります:
_long now = time(NULL);
_
(もちろん、後で、プレーンlong
の代わりに_time_t
_を使用し始めたので、たとえば、 y2.038k問題 。)
[P.S. _int [2]
_からlong
への変更、および戻り値を追加する変更が異なるタイミングで発生したかどうかは、実際にはわかりません。それらは同時に起こったかもしれません。ただし、時刻が配列として表された場合、ポインターを介して入力されるhadは、値として返されなかったため、もちろん、C関数は配列を返すことができません。]
time
関数は、現在の時刻を(time_t
値)ある時点からの秒数(UNIXシステムでは、UTC 1970年1月1日午前0時以降)、1つの引数、time_t
時刻が格納されるポインター。 NULL
を引数として渡すと、time
は通常の戻り値として時刻を返しますが、他の場所には保存しません。
Time
:1970年1月1日からの経過時間を秒単位で返します
int main (void)
{
//print time in seconds from 1 Jan 1970 using c
float n = time(NULL);
printf("%.2f\n" , n);
}
これは1481986944.00と印刷されます(現時点では)。
ctimeのドキュメント を参照する必要があります。 time
は、タイプtime_t *
(time_t
オブジェクトへのポインター)の1つのパラメーターを取り、それに現在の時刻を割り当てる関数です。このポインターを渡す代わりに、NULL
を渡し、代わりに返されたtime_t値を使用することもできます。
_time_t
_オブジェクトへのポインターを渡すと、その時間は現在の時間でいっぱいになります(戻り値は指定したものと同じです)。 NULL
を渡すと、それは無視され、現在の時刻を表す新しい_time_t
_オブジェクトが返されるだけです。
Nb:time(&timer);
はtimer = time(NULL);
と同等です