¿Cómo deshacerse de la advertencia con time.h en C ++?
-
18-09-2019 - |
Pregunta
Cuando uso este
#include<time.h>
//...
int n = time(0);
//...
Aparece una advertencia sobre hora de convertir int. ¿Hay una manera de eliminar esta advertencia?
Solución
Tiempo devuelve time_t
y no entero. Usar este tipo preferentemente, ya que puede ser más grande que int
.
Si realmente necesita int
, entonces encasillado explícitamente, por ejemplo:
int n = (int)time(0);
Otros consejos
Sí, el cambio n sea un time_t
. Si nos fijamos en la firma en time.h en la mayoría / todos los sistemas, se verá que eso es lo que devuelve.
#include<time.h>
//...
time_t n = time(0);
//...
Tenga en cuenta que Arak es cierto al usar un int de 32 bits es un problema, como mínimo, debido al error 2038 . Sin embargo, debe tener en cuenta que cualquier tipo de aritmética sobre un entero n (en lugar de un time_t) sólo aumenta la probabilidad de que el código se tropezar con ese insecto temprano.
PD: En caso de que no lo hizo claro en la respuesta original, la mejor respuesta a una advertencia del compilador es casi siempre para hacer frente a la situación que está siendo advertido acerca. Por ejemplo, obligando a los datos de mayor precisión en una variable de precisión menor pierde la información - el compilador está tratando de advertirle que es posible que acaba de crear un error de minas terrestres que alguien no va a tropezar con hasta mucho más tarde
. Creo que está utilizando Visual C ++. El tipo de retorno de time(0)
se 64bit int
incluso si está programando para la plataforma 32bit
a diferencia g++
. Para eliminar la advertencia, simplemente asignar a time(0)
64bit
variable.
Es posible que desee utilizar un tipo de time_t en lugar de un int.
Vea el ejemplo en http://en.wikipedia.org/wiki/Time_t .
La razón es el tiempo () función devuelve un tiempo de time_t lo que es posible que tenga que hacer un molde estático a un int o uint en este caso. Escribir de esta manera:
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)