Como se livrar do aviso com o tempo.H em C ++?
-
18-09-2019 - |
Pergunta
Quando eu uso isso
#include<time.h>
//...
int n = time(0);
//...
Eu recebo um aviso sobre a conversão de tempo para int. Existe uma maneira de remover este aviso?
Solução
Retornos de tempo time_t
e não inteiro. Use esse tipo de preferência porque pode ser maior do que int
.
Se você realmente precisa int
, então o tipo explicitamente, por exemplo:
int n = (int)time(0);
Outras dicas
Sim, mude n para ser um time_t
. Se você olhar para a assinatura no tempo.h na maioria dos sistemas, verá que é isso que ele retorna.
#include<time.h>
//...
time_t n = time(0);
//...
Observe que Arak está certo: usar um Int de 32 bits é um problema, no mínimo, Devido ao bug de 2038. No entanto, você deve considerar que qualquer tipo de aritmética em um número inteiro n (em vez de um tempo_t) aumenta apenas a probabilidade de que seu código tropeça nesse bug mais cedo.
PS: Caso eu não tenha deixado claro na resposta original, a melhor resposta a um aviso do compilador é quase sempre abordar a situação sobre a qual você está sendo avisado. Por exemplo, forçar dados de maior precisão a uma variável de precisão mais baixa perde informações - o compilador está tentando avisá -lo de que você pode ter acabado de criar um bug de minas terrestres que alguém não tropeça até muito mais tarde.
Eu acho que você está usando o Visual C ++. O tipo de retorno de time(0)
é 64bit int
mesmo se você estiver programando para 32bit
plataforma diferente g++
. Para remover o aviso, basta atribuir time(0)
para 64bit
variável.
Você provavelmente deseja usar um tipo de tempo_t em vez de um int.
Veja o exemplo em http://en.wikipedia.org/wiki/time_t.
O motivo é que as funções do tempo () retornam um horário de tempo, para que você precise fazer um elenco estático para um INT ou UINT neste caso. Escreva dessa maneira:
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)