Портирование кода с 32 до 64 бит. Множество мест с
int len = strlen(pstr);
Все они генерируют предупреждения сейчас, потому что strlen() возвращает size_t, который равен 64 бит, а int все равно 32 бит. Поэтому я заменил их
size_t len = strlen(pstr);
Но я просто понял, что это небезопасно, поскольку size_t не имеет знака и его можно рассматривать как подписанный кодом (я фактически столкнулся с одним случаем, когда он вызвал проблему, спасибо, модульные тесты!).
Слепо отбрасывание strlen return to (int) чувствует себя грязным. Или, может быть, не стоит? Поэтому вопрос: есть ли для этого элегантное решение? У меня, вероятно, есть тысяча строк кода, подобных этому в кодовой базе; Я не могу вручную проверять каждую из них, а охват тестирования в настоящее время составляет от 0,01 до 0,001%.