Domanda

Quando uso questo

#include<time.h>
//...
int n = time(0);
//...

Ho ricevuto un avviso giunto il momento di int conversione. C'è un modo per rimuovere questo avviso?

È stato utile?

Soluzione

Ora ritorna time_t e non intero. Usare quel tipo preferibilmente perché può essere maggiore di int.

Se si ha realmente bisogno int, quindi typecast esplicitamente, ad esempio:

int n = (int)time(0);

Altri suggerimenti

Sì, il cambiamento n per essere un time_t . Se si guarda alla firma in time.h sulla maggior parte / tutti i sistemi, vedrai che questo è quello che ritorna.

#include<time.h>
//...
time_t n = time(0);
//...

Si noti che Arak ha ragione: con un 32 bit int è un problema, come minimo, a causa del bug 2038 . Tuttavia, si dovrebbe considerare che qualsiasi tipo di aritmetica su un intero n (piuttosto che un time_t) aumenta solo la probabilità che il codice sarà inciampare quel bug precoce.

PS: Nel caso in cui non ho fatto in chiaro nella risposta originale, la migliore risposta a un avviso del compilatore è quasi sempre di affrontare la situazione che sei stato avvertito circa. Ad esempio, costringendo i dati di maggiore precisione in una variabile di precisione inferiore perde le informazioni - il compilatore sta cercando di avvertire che si potrebbe avere appena creato un bug mina che qualcuno non inciampare solo molto più tardi

.

Credo che si utilizza Visual C ++. Il tipo di ritorno di time(0) è 64bit int anche se si sta programmando per la piattaforma 32bit a differenza g++. Per rimuovere l'avviso, basta assegnare time(0) a 64bit variabile.

Probabilmente si desidera utilizzare un tipo di time_t invece di un int.

Si veda l'esempio a http://en.wikipedia.org/wiki/Time_t .

Il motivo è tempo di funzioni () restituisce un tempo time_t quindi potrebbe essere necessario fare un cast statico per un int o uint in questo caso. Scrivere in questo modo:

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)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top