int vs size_t sur 64 bits

Le portage de code de 32 bits à 64 bits. Beaucoup d'endroits avec

int len = strlen(pstr);

Ces tous de générer des avertissements maintenant, parce que strlen() retourne size_t qui est 64 bits et int est toujours en 32 bits. J'ai donc été en les remplaçant par

size_t len = strlen(pstr);

Mais je viens de réaliser que ce n'est pas sûr, comme un size_t est pas signé et il peut être traité comme signé par le code (je l'ai fait, couru dans un cas où il a causé un problème, je vous remercie, tests unitaires!).

Aveuglément casting strlen retour (int) se sent sale. Ou peut-être il ne devrait pas?
La question est donc: est-il une solution élégante pour cela? J'ai probablement un millier de lignes de code comme ça dans le code, je ne peux pas vérifier manuellement chaque un d'eux et la couverture de test est actuellement quelque part entre 0,01 et 0,001%.

Avez-vous un exemple où cette durée est considérée comme signé?
L'exemple est probablement quelque chose le long des lignes de: len--; if (len < 0) { break }

OriginalL'auteur MK. | 2010-03-25