Ce este time(NULL) în C? (Programare, C, Timp)

dmubu a intrebat.

Învăț despre unele funcții de bază în C și am întâlnit time(NULL) în unele manuale.

Ce înseamnă mai exact acest lucru?

8 răspunsuri
jason

Puteți trece un pointer la un fișier time_t obiect care time se va umple cu ora curentă (iar valoarea de retur este aceeași cu cea la care ați indicat). Dacă treceți în NULL, , acesta îl ignoră și doar returnează o nouă valoare time_t obiect care reprezintă ora curentă.

jonsca

Apelul către time(NULL) returnează ora calendaristică curentă (secunde de la 1 ianuarie 1970). A se vedea această referință pentru detalii. În mod normal, dacă treceți un pointer la un fișier time_t variabilă, , acea variabilă pointer va indica ora curentă.

Comentarii

  • +1. De asemenea, pentru o variabilă timer de tip time_t, , time(&timer); este echivalent cu timer = time(NULL); –  > Por Brian L.
Steve Summit

[Răspuns copiat de la o întrebare duplicată, acum eliminată].

time() este o funcție foarte, foarte veche. Ea datează de pe vremea când limbajul C nici măcar nu avea tipul long. Pe vremuri, singura modalitate de a obține ceva de genul unui tip pe 32 de biți era să folosești o matrice de doi ints – și asta se întâmpla când ints aveau 16 biți.

Așa că se numea

int now[2];
time(now);

și se umplea timpul de 32 de biți în now[0] și now[1], , 16 biți la un moment dat. (Acest lucru explică de ce celelalte funcții legate de timp, cum ar fi localtime și ctime, , tind să accepte și ele argumentele lor temporale prin intermediul unor pointeri).

Mai târziu, dmr a terminat de adăugat long la compilator, astfel încât ați putea începe să spuneți

long now;
time(&now);

Tot mai târziu, cineva și-a dat seama că ar fi util dacă time() ar merge mai departe și ar returna valoarea, mai degrabă decât să o completeze prin intermediul unui pointer. Dar – compatibilitatea retroactivă este un lucru minunat – în beneficiul întregului cod care încă mai făcea time(&now), , valoarea time() funcția trebuia să continue să susțină argumentul pointer. De aceea — și acesta este motivul pentru care compatibilitatea retroactivă nu este întotdeauna un lucru atât de minunat — dacă folosiți valoarea de returnare, trebuie în continuare să treceți NULL ca pointer:

long now = time(NULL);

(Tot mai târziu, desigur, am început să folosim time_t în loc de simplu long pentru ori, astfel încât, de exemplu, să poată fi schimbat la un tip pe 64 de biți, evitând problema y2.038k.)

[P.S. De fapt, nu sunt sigur că schimbarea de la int [2] la long, , și modificarea pentru a adăuga valoarea de returnare, au avut loc în momente diferite; s-ar putea să se fi întâmplat în același timp. Dar rețineți că atunci când timpul a fost reprezentat ca un array, acesta avea să fie completat prin intermediul unui pointer, nu putea fi returnat ca valoare, deoarece, desigur, funcțiile C nu pot returna array-uri].

Comentarii

  • Kernelul Linux 2.4 a avut o eroare cu un sistem de 64 de biți. time_t în cazul în care, dacă se transmitea un parametru non NULL, acesta se completa doar pe cei 32 de biți inferiori, lăsând biții superiori neschimbate. –  > Por dbush.
jwodder

Site-ul time returnează ora curentă (sub formă de time_t valoare) în secunde de la un anumit moment (pe sistemele Unix, de la miezul nopții UTC din 1 ianuarie 1970), și acceptă un argument, o valoare time_t un pointer în care este stocată ora. Transmiterea NULL ca argument face ca time să returneze ora ca valoare de returnare normală, dar să nu o stocheze în altă parte.

Mob

Time : Se returnează timpul scurs în secunde de la epoca 1 ianuarie 1970.

Comentarii

  • time, , nu Time — iar chestia cu secundele din 1970 nu este specificată de limbajul C (este POSIX). –  > Por Keith Thompson.
Mahmoud Al-Qudsi

Trebuie să vă referiți la documentația pentru ctime. time este o funcție care primește un parametru de tip time_t * (un pointer la un fișier time_t obiect) și îi atribuie ora curentă. În loc să treceți acest pointer, puteți trece și NULL și apoi să utilizați în schimb valoarea time_t returnată.

Comentarii

  • Funcția ctime la care se face referire aici este antetul C++ <ctime>, , care este similar cu antetul C <time.h>. (Întrebarea era despre C, nu despre C++.) Există, de asemenea, o funcție numită ctime. –  > Por Keith Thompson.
k_clark.90
int main (void)
{   
    //print time in seconds from 1 Jan 1970 using c   
    float n = time(NULL);   
    printf("%.2f
" , n);      
}      

aceasta tipărește 1481986944.00 (în acest moment).

Comentarii

  • Acest răspuns este greșit deoarece time returnează time_t, , și își va pierde precizia atunci când va fi stocat în float. –  > Por quantum.
Md. Al Amin Bhuiyan

Puteți trece un pointer la un time_t obiect pe care timpul îl va umple cu timpul curent (iar valoarea de retur este aceeași cu cea la care ați indicat). Dacă treceți în NULL, , acesta îl ignoră și pur și simplu returnează o nouă valoare time_t obiect care reprezintă ora curentă.

Nb:time(&timer); este echivalent cu timer = time(NULL);

Tags:,