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?

¿Fue útil?

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)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top