Oggi ho realizzato per la prima volta una build a 64 bit del mio progetto. Fondamentalmente è stato compilato, collegato ed eseguito ok, tranne che per gli avvertimenti che si lamentavano dell'incompatibilità tra il nuovo tipo size_t a 64 bit e il tipo int semplice. Questo si verifica soprattutto in situazioni come questa nel mio codice:Come evitare problemi con i tipi size_t e int in build C++ a 64 bit?
void func(std::vector<Something> &vec)
{
int n = vec.size();
for (int i=0; i < n; i++)
{
....vec[i]....
}
}
questo è abbastanza facile da risolvere, e ho letto un articolo dicendo si dovrebbe piuttosto usare size_t o ptrdif_t come indici di loop. Ma cosa posso fare in una situazione come questa?
void outsideLibraryFunc(int n);
void func(std::vector<Something> &vec)
{
int n = vec.size();
outsideLibraryFunc(n);
}
non può cambiare dichiarazione di funzione della biblioteca all'esterno, che si aspetta un argomento di tipo int, e devo passare il numero degli elementi del vettore. Cosa posso fare se non disabilitare gli avvisi del compilatore?
+1 su Q: non sapevo che size_t! = Unsigned int – pm100
@ pm100 It * can * be, e sulla maggior parte dei sistemi a 32 bit lo è, ma non deve essere. In particolare, nei sistemi a 64 bit che utilizzano le convenzioni LP64 o LLP64 (la maggior parte dei moderni sistemi a 64 bit), tende ad essere più grande di un 'unsigned int'. –
ssize_t a volte è disponibile per un size_t firmato – user318904