Вдохновленный этот вопрос о следующем коде SQLite3:
static int strlen30(const char *z){
const char *z2 = z;
while( *z2 ){ z2++; }
return 0x3fffffff & (int)(z2 - z);
}
который сопровождается сообщением , говорящим, что эта функция помогает с переполнениями int.
Меня особенно интересует эта часть:
const char *z2 = z;
while( *z2 ){ z2++; }
для меня этот цикл продвигается z2 до тех пор, пока z2 не укажет на нулевой ограничитель. Затем z2-z выводит длину строки.
Почему бы не использовать strlen() для этой части и переписать вот так:
return 0x3fffffff & (int)(strlen(z));
Зачем использовать вычитание цикла + вместо strlen()? Что может сделать цикл + вычитание, что strlen() не может?