Question

Quand j'utilise cette

#include<time.h>
//...
int n = time(0);
//...

Je reçois un avertissement sur la conversion du temps en int. Y at-il un moyen de supprimer cet avertissement?

Était-ce utile?

La solution

Temps retourne time_t et non entier. Utilisez ce type de préférence, car il peut être plus grande que int.

Si vous avez vraiment besoin int, cataloguée alors explicitement, par exemple:

int n = (int)time(0);

Autres conseils

Oui, le changement n d'être un time_t. Si vous regardez la signature time.h sur la plupart / tous les systèmes, vous verrez que c'est ce qu'il retourne.

#include<time.h>
//...
time_t n = time(0);
//...

Notez que Arak est juste: l'aide d'un int 32 bits est un problème, au minimum, en raison du bug 2038. Cependant, vous devez considérer que toute sorte d'arithmétique sur un entier n (plutôt que d'un time_t) ne fait qu'augmenter la probabilité que votre code voyage sur ce bogue tôt.

PS: Dans le cas où je ne l'ai pas clairement dans la réponse originale, la meilleure réponse à un avertissement du compilateur est presque toujours face à la situation que vous être averti. Par exemple, ce qui oblige les données de plus grande précision dans une variable de précision inférieure perd des informations - le compilateur essaie de vous avertir que vous pourriez avoir créé un bug de mine terrestre que quelqu'un ne se déclenche pas sur que beaucoup plus tard

.

Je pense que vous utilisez Visual C ++. Le type de retour de time(0) est 64bit int même si vous programmez pour la plate-forme de 32bit contrairement g++. Pour supprimer l'avertissement, juste à affecter time(0) 64bit variable.

Vous voulez probablement utiliser un type de time_t au lieu d'un int.

Voir l'exemple http://en.wikipedia.org/wiki/Time_t .

La raison en est temps fonctions () retourne un temps de time_t afin que vous pourriez avoir besoin de faire une distribution statique à un int ou uint dans ce cas. Ecrire ainsi:

time_t timer;
int n = static_cast<int> (time(&timer)); // this will give you current time as an integer and it is same as time(NULL)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top