Codice di porta da 32 bit a 64 bit. Un sacco di posti conint vs size_t su 64 bit
int len = strlen(pstr);
Questi tutti generano avvisi ora perché strlen() restituisce size_t, che è a 64 bit e int è ancora a 32 bit. Così Li ho sostituendoli con
size_t len = strlen(pstr);
Ma ho appena reso conto che questo non è sicuro, come size_t non è firmato e può essere considerato come sottoscritto dal codice (io in realtà sono imbattuto in un caso in cui ha causato una problema, grazie, unit test!).
Il lancio di strind di ritorno a (int) si sente sporco. O forse non dovrebbe?
Quindi la domanda è: c'è una soluzione elegante per questo? Probabilmente ho mille righe di codice come quello nella base di codice; Non riesco a controllare manualmente ognuno di essi e la copertura del test è attualmente tra 0,01 e 0,001%.
Avete un esempio in cui questa lunghezza è trattato come firmato? – kroimon
L'esempio è probabilmente qualcosa sulla falsariga di: 'len--; se (len <0) {break} ' – Tim