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?

Foi útil?

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)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top