Quel est le temps (NULL) en C?

J’apprends certaines fonctions de base et j’ai rencontré du time(NULL) dans certains manuels.

Qu’est-ce que cela signifie exactement?

Vous pouvez transmettre un pointeur à un object time_t dont l’ time se remplira avec l’heure actuelle (et la valeur renvoyée est la même que celle que vous avez pointée). Si vous passez NULL , il l’ignore et renvoie simplement un nouvel object time_t qui représente l’heure actuelle.

L’appel à l’ time(NULL) renvoie l’heure du calendrier en cours (secondes depuis le 1er janvier 1970). Voir cette référence pour plus de détails. Normalement, si vous passez un pointeur à une variable time_t , cette variable pointera vers l’heure actuelle.

[Réponse copiée à partir d’une question en double, maintenant supprimée .]

time() est une fonction très ancienne. Cela remonte à une journée où le langage C n’avait même pas de type long . Il était une fois, la seule façon d’obtenir quelque chose comme un type 32 bits était d’utiliser un tableau de deux int s – et c’était quand int s était de 16 bits.

Alors tu as appelé

 int now[2]; time(now); 

et il a rempli le temps de 32 bits dans now[0] et now[1] , 16 bits à la fois. (Ceci explique pourquoi les autres fonctions temporelles, telles que localtime et ctime , acceptent également leurs arguments temporels via des pointeurs.)

Plus tard, dmr a fini d’append long au compilateur, vous pouvez donc commencer à dire

 long now; time(&now); 

Plus tard, quelqu’un s’est rendu compte qu’il serait utile que time() soit renvoyé et que la valeur soit remplacée par un pointeur. Mais – la compatibilité ascendante est une chose merveilleuse – pour le bénéfice de tout le code qui faisait encore du time(&now) , la fonction time() devait continuer à supporter l’argument du pointeur. C’est pourquoi – et c’est pourquoi la compatibilité descendante n’est pas toujours une chose merveilleuse – si vous utilisez la valeur de retour, vous devez toujours passer NULL en tant que pointeur:

 long now = time(NULL); 

(Plus tard, bien sûr, nous avons commencé à utiliser time_t plutôt que plain pour les temps, de sorte que, par exemple, il puisse être modifié en 64 bits, évitant le problème de Y2.038k .)

[PS Je ne suis pas vraiment sûr que le changement de int [2] à long , et le changement pour append la valeur de retour, se sont produits à des moments différents; ils ont peut-être eu lieu en même temps. Mais notez que lorsque le temps était représenté comme un tableau, il devait être rempli via un pointeur, il ne pouvait pas être renvoyé en tant que valeur, car les fonctions C ne pouvaient pas retourner les tableaux.]

La fonction time renvoie l’heure courante (en tant que time_t ) en secondes depuis un point (sur les systèmes Unix, depuis minuit UTC le 1er janvier 1970) et prend un argument, un pointeur time_t dans lequel l’heure est stockée. NULL passez NULL comme argument, le time retourne l’heure en tant que valeur de retour normale, mais ne la stocke nulle part ailleurs.

Time : retourne le temps écoulé en secondes depuis l’époque 1 janvier 1970

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

ceci imprime 1481986944.00 (à ce moment).

Vous devez vous référer à la documentation pour ctime . time est une fonction qui prend un paramètre de type time_t * (un pointeur sur un object time_t ) et lui atsortingbue l’heure actuelle. Au lieu de passer ce pointeur, vous pouvez également transmettre NULL , puis utiliser la valeur time_t renvoyée.

Vous pouvez transmettre un pointeur à un object time_t dont l’heure se remplira avec l’heure actuelle (et la valeur renvoyée est la même que celle que vous avez pointée). Si vous passez NULL , il l’ignore et renvoie simplement un nouvel object time_t qui représente l’heure actuelle.

Nb:time(&timer); est équivalent à timer = time(NULL);