Was ist time(NULL) in C?

Lesezeit: 4 Minuten

Ich lerne einige grundlegende C-Funktionen kennen und bin darauf gestoßen time(NULL) in manchen Handbüchern.

Was genau bedeutet das?

Sie können einen Zeiger auf a übergeben time_t widersprechen time wird mit der aktuellen Zeit gefüllt (und der Rückgabewert ist derselbe, auf den Sie gezeigt haben). Wenn Sie vorbeikommen NULLes ignoriert es einfach und gibt lediglich ein neues zurück time_t Objekt, das die aktuelle Uhrzeit darstellt.

Jonscas Benutzeravatar
jonska

Der Aufruf an time(NULL) gibt die aktuelle Kalenderzeit zurück (Sekunden seit dem 1. Januar 1970). Sehen diese Referenz für Details. Wenn Sie normalerweise einen Zeiger auf a übergeben time_t Variablezeigt diese Zeigervariable auf die aktuelle Zeit.

  • +1. Auch für eine Variable timer des Typs time_t, time(&timer); ist äquivalent zu timer = time(NULL);

    – Brian L

    26. September 2011 um 3:08 Uhr

Benutzeravatar von Steve Summit
Steve Gipfel

time() ist eine sehr, sehr alte Funktion. Es geht auf eine Zeit zurück, als die C-Sprache noch nicht einmal Typ hatte long. Früher bestand die einzige Möglichkeit, so etwas wie einen 32-Bit-Typ zu erhalten, darin, ein Array aus zwei zu verwenden ints – und das war wann ints waren 16 Bit.

Also hast du angerufen

int now[2];
time(now);

und es füllte die 32-Bit-Zeit ein now[0] und now[1], 16 Bit auf einmal. (Dies erklärt, warum die anderen zeitbezogenen Funktionen, wie z localtime und ctimeneigen dazu, ihre Zeitargumente auch über Zeiger zu akzeptieren.)

Später, dmr fertig hinzufügen long an den Compiler, so könnte man anfangen zu sagen

long now;
time(&now);

Noch später erkannte jemand, dass es nützlich wäre, wenn time() ging weiter und gab den Wert zurück, anstatt ihn nur über einen Zeiger auszufüllen. Aber – Abwärtskompatibilität ist eine wunderbare Sache – zum Nutzen des gesamten Codes, der noch ausgeführt wurde time(&now)das time() Die Funktion musste das Zeigerargument weiterhin unterstützen. Aus diesem Grund – und deshalb ist Abwärtskompatibilität schließlich nicht immer so eine wunderbare Sache – wenn Sie den Rückgabewert verwenden, müssen Sie immer noch NULL als Zeiger übergeben:

long now = time(NULL);

(Natürlich haben wir noch später angefangen time_t statt schlicht long für mal, damit man zB auf einen 64-Bit-Typ umstellen kann, um das auszuweichen y2.038k Problem.)

[P.S. I’m not actually sure the change from int [2] zu long, und die Änderung, um den Rückgabewert hinzuzufügen, geschah zu unterschiedlichen Zeiten; sie könnten gleichzeitig passiert sein. Beachten Sie jedoch, dass, wenn die Zeit als Array dargestellt wurde, it hatte über einen Zeiger auszufüllen, konnte nicht als Wert zurückgegeben werden, da C-Funktionen natürlich keine Arrays zurückgeben können.]

  • Der 2.4-Linux-Kernel hatte einen Fehler mit einem 64-Bit time_t wo, wenn Sie einen Nicht-NULL-Parameter übergeben, der nur die unteren 32 Bits ausfüllt und die oberen Bits unverändert lässt.

    – dbusch

    3. September 2017 um 17:18 Uhr

Das time Funktion gibt die aktuelle Uhrzeit zurück (als time_t Wert) in Sekunden seit einem bestimmten Zeitpunkt (auf Unix-Systemen seit Mitternacht UTC, 1. Januar 1970), und es nimmt ein Argument, a time_t Zeiger, in dem die Uhrzeit gespeichert ist. Vorbeigehen NULL wie das Argument verursacht time um die Uhrzeit als normalen Rückgabewert zurückzugeben, aber nirgendwo anders zu speichern.

Time : Gibt die vergangene Zeit in Sekunden seit der Epoche 1. Januar 1970 zurück

  • timenicht Time — und die Sekunden seit 1970 werden nicht von der C-Sprache spezifiziert (es ist POSIX).

    – Keith Thompson

    26. September 2011 um 3:48 Uhr

Benutzeravatar von Mahmoud Al-Qudsi
Mahmoud Al-Qudsi

Sie müssen sich auf die beziehen Dokumentation für ctime. time ist eine Funktion, die einen Parameter vom Typ akzeptiert time_t * (ein Zeiger auf a time_t Objekt) und weist ihm die aktuelle Uhrzeit zu. Anstatt diesen Zeiger zu übergeben, können Sie auch übergeben NULL und verwenden Sie dann stattdessen den zurückgegebenen time_t-Wert.

  • timenicht Time — und die Sekunden seit 1970 werden nicht von der C-Sprache spezifiziert (es ist POSIX).

    – Keith Thompson

    26. September 2011 um 3:48 Uhr

Benutzeravatar von Marc
Markus

int main (void)
{   
    //print time in seconds from 1 Jan 1970 using c   
    float n = time(NULL);   
    printf("%.2f\n" , n);      
}      

dies druckt 1481986944,00 (in diesem Moment).

  • Diese Antwort ist falsch, weil time kehrt zurück time_tund verliert an Genauigkeit, wenn es in gespeichert wird float.

    – Quanten

    20. November 2017 um 22:16 Uhr

1414550cookie-checkWas ist time(NULL) in C?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy