Comments 8
Спасибо за статью!
В теле цикла обнаружено объявление переменной 'it', совпадающей с переменной, используемой для контроля цикла. Такой код может содержать логические ошибки, вплоть до получения вечного цикла.Конечно, ад, что стандарт языка такое допускает.
+1
int
compute_order(unsigned long size)
{
int order;
unsigned long tmp;
for (order = 0, tmp = size; tmp >>= 1; ++order); //<==
if (size & ~(1 << order))
++order;
return order;
}
Форматирование странное, но код рабочий. Хотели как лучше, видимо, а получилось как всегда.
В этом цикле вычисляется номер старшего установленного разряда. То исть исходное число сдвигается до тех пор, пока не станет равным нулю (tmp >>= 1) и считается количество итераций (++order).
for (order = 0, tmp = size; tmp >>= 1; ++order);
А этот кодif (size & ~(1 << order))
++order;
выполняет округление к большему.По сути это ceil(log2(N)), часто встречаемая конструкция для вычисления необходимого количества бит для кодирования N различных элементов.
+4
Было бы интересно посмотреть на результаты анализа helenos.org сейчас это единственная (полу)живая альтернативная ОС кроме такой же полуживой Haiku.
0
UFO just landed and posted this here
Скоро будут новые статьи про проверку Haiku OS, а пока для разогрева: Про разницу между strlcat и strncat.
0
А вот и первая из них: Как выстрелить себе в ногу в C и C++. Сборник рецептов Haiku OS.
0
Sign up to leave a comment.
Проверка операционной системы Haiku (семейство BeOS) c помощью PVS-Studio. Часть 2