[Homeros] Fwd: Ошибки в Voiceman
Michael Pozhidaev
msp на altlinux.ru
Чт Сен 22 00:58:10 UTC 2011
Дмитрий, добрый день!
> for (int i=0, len=strlen(s); i < len; i++)
> putchar(s[i]);
>
> Компилируется без предупреждений и работает без ошибок для всех s, длина
> которых не превосходит INT_MAX. Впрочем, в этом примере особой разницы
Ну да, всё верно, операция сравнения сама по себе стала безопасной. Это
к делу не относится, но кстати сказать, что так писать весьма даже
рекомендуется, поскольку общая работа фрагмента стала линейной вместо
квадратичной в случае i < strlen(). Я бы сказал больше, что строка
> Насчёт грабель. Я имел в виду вот эти:
Ух ты, ну ты и достал из чулана. Про это уже много раз забыть успел,
что когда-то правил этот кусок. Да, тоже абсолютно верно, что это
натуральная грабля любого цикла к нулю, если используется беззнаковая
переменная.
Но опять же, поскольку речь идёт об индексации символов в строке,
правильнее всё-таки просто сделать код безопасным, чем начать смешивать
числа со знаком и без.
--
Michael Pozhidaev. Tomsk, Russia.
Russian info page: http://www.marigostra.ru/
Подробная информация о списке рассылки Homeros