Comment se débarrasser de l'avertissement avec time.h en C ++?
-
18-09-2019 - |
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?
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)