Вдохновленный этот вопрос о следующем коде 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()
не может?