Je découvre certaines fonctions de base du C et ai rencontré time(NULL)
dans certains manuels.
Qu'est-ce que cela veut dire exactement?
Vous pouvez passer un pointeur sur un objet time_t
que time
remplira avec l'heure actuelle (et la valeur renvoyée est identique à celle que vous avez indiquée). Si vous passez NULL
, il l'ignore et renvoie simplement un nouvel objet time_t
qui représente l'heure actuelle.
L'appel à time(NULL)
renvoie l'heure actuelle du calendrier (en secondes depuis le 1er janvier 1970). Voir cette référence pour plus de détails. Habituellement, si vous passez un pointeur sur une time_t
variable , cette variable de pointeur indiquera l'heure actuelle.
[Réponse copiée à partir d'un dupliquer, question maintenant supprimée .]
time()
est une très, très ancienne fonction. Cela remonte à un jour où le langage C n'avait même pas le type long
. Il était une fois, le seul moyen d'obtenir quelque chose comme un type 32 bits était d'utiliser un tableau de deux int
s - et c'était à ce moment-là que int
s avait une résolution de 16 bits.
Alors vous avez appelé
int now[2];
time(now);
et il remplit l'heure 32 bits dans now[0]
et now[1]
, 16 bits à la fois. (Cela explique pourquoi les autres fonctions liées au temps, telles que localtime
et ctime
, tendent également à accepter leurs arguments de temps via des pointeurs.)
Plus tard, dmr a fini d’ajouter long
au compilateur, vous pouvez donc commencer à dire
long now;
time(&now);
Plus tard encore, quelqu'un a compris qu'il serait utile que time()
poursuive et renvoie la valeur, plutôt que de la renseigner via un pointeur. Mais - la compatibilité en amont est une chose merveilleuse - au profit de tout le code qui fonctionnait encore time(&now)
, la fonction time()
devait continuer à supporter l'argument pointeur. C'est pourquoi - et c'est pourquoi la compatibilité en amont n'est pas toujours une chose merveilleuse - si vous utilisez la valeur de retour, vous devez toujours transmettre NULL en tant que pointeur:
long now = time(NULL);
(Plus tard encore, bien sûr, nous avons commencé à utiliser time_t
au lieu de plain long
pour les heures, de sorte que, par exemple, il puisse être modifié en un type 64 bits, en évitant le problème y2.038k .)
[P.S. En fait, je ne suis pas sûr que le passage de int [2]
à long
et l'ajout de la valeur de retour se soient produits à des moments différents; ils pourraient avoir eu lieu en même temps. Mais notez que lorsque l'heure était représentée sous la forme d'un tableau, elle {avait} à remplir via un pointeur, elle ne peut pas être renvoyée sous forme de valeur car, bien entendu, les fonctions C ne peuvent pas renvoyer de tableaux.
La fonction time
renvoie l’heure actuelle (en tant que valeur time_t
) en secondes depuis un certain point (sur les systèmes Unix, à partir de minuit UTC le 1er janvier 1970) et prend un argument, un pointeur time_t
dans lequel l’heure est stockée. Si vous passez NULL
en tant qu’argument, time
renvoie l’heure en tant que valeur de retour normale, mais ne la stocke nulle part ailleurs.
Time
: Renvoie 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 (en 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 objet time_t
) et lui attribue l'heure actuelle. Au lieu de passer ce pointeur, vous pouvez également transmettre NULL
, puis utiliser la valeur time_t renvoyée.
Vous pouvez passer un pointeur sur un objet time_t
que l'heure se remplira avec l'heure actuelle (et la valeur renvoyée est la même que celle que vous avez indiquée). Si vous passez NULL
, il l'ignore et renvoie simplement un nouvel objet time_t
qui représente l'heure actuelle.
Nb:time(&timer);
est équivalent à timer = time(NULL);