Комментарии 39
Лет 7 назад, в одном проекте проекте видел switch на 17 тысяч строк. С вложенными ветвлениями. Увы, проект очень древний и открытыми исходниками там и не пахло, даже скриншота не осталось.
Пользователи жаловались на пару минут загрузки при переходах.
Во времена Pentium D это было дорого и печально.
Зачем функции, возвращающей число символов _до_ завершающего нуля «пробегать все символы строки»? Увидит первый «0» и остановится. Тут максимум «оптимизация» вызова функции вместо сравнения ИМХО…
Имеется в виду, что если строка не пустая и достаточно длинная, strlen пробежится по ней всей, хотя могла бы остановиться после первого шага.
А… кажись дошло — если строка не пустая, то получаем лишний цикл вычисления длины… :)
Собс-но, фраза «Если на вход подается большая строка, то каждый её символ всё равно будет сравнён со строковым нулём.» ввела в заблуждение
Я может быть неправильно вас понял, но у меня сложилось впечатление, что у вас "символы до завершающего нуля" и "вся строка" это разные вещи. Нет, это одно и то же. И там нет никакого "первого вхождения нуля" и вообще никаких вхождений нуля. Ноль это спецзначение, обозначающее конец строки, и никаких других концов, до которых можно пробежать, у строки быть не может.
Соответственно, strlen пробегает все символы строки + не-символ-строки '\0' который идёт ПОСЛЕ всех символов строки, а затем останавливается. Байты после нуля уже к строке никакого отношения не имеют, даже если под них выделена память в массиве char, в котором эта строка хранится.
Напомнило. Первый раз, когда я писал процедуру сортировки для 4 элементов, я использовал тоьлко if'ы, и код получился аж на 150 строк. Меня извиняет только то, что в тот момент мне было только 9 лет.
Terry Cavanagh прямо написал, что там bullshit на bullshit-е.
Не каждый программист (даже в замкнутой компании, среди коллег) осмелится показать всему миру (или своим коллегам) свой текущий код. Не тот, что для этого тщательно вылизан и причёсан. А тупо "прямо щазз", "в честь юбилея". (но при этом таки работает!)
Codacy вообще бесполезен (самый кривой в этом списке).
У Coverity очень ужасный WEB-интерфейс.
LGTM игнорит windows проекты.
Кстати, Coverity заинтегрировался с Travis-CI. Было бы здорово, что бы PVS-Studio заинтегрировался с AppVeyor (что бы свою сборочную систему не городить).
Да даже и без интеграции с AppVeyor можно обойтись.
На главной странице документации приведены способы интеграции своего проекта с разными CI:
Некомерческим открытым проектам можно использовать PVS-Studio бесплатно. Где-то в блоге у нас есть полное описание условий.
А вот как удобный и понятный WEB-интерфейс с результатами сгенерировать? Вот в чём вопрос.
У Coverity очень ужасный WEB-интерфейс.По отзывам у них много проблем, в том числе с анализом.
PVS-Studio используют в связке с SonarQube. Мы очень давно сделали плагин для него. Это очень популярное и удобное решение среди клиентов наших клиентов.
Перекрытие имён – это достаточно грубая ошибка, которую бывает весьма тяжело отыскать самостоятельно в ходе обзора кода.
Увы, обычно это ошибкой не считают. А так, всегда всё компилю с -Wshadow -Werror и такие места сразу отсеиваются.
Если вы читаете этот текст – значит, вы либо подумали, что с заголовком статьи что-то не то, либо увидели в нём название знакомой компьютерной игры.… либо подумали, что статья про «домен с WWW vs домен без WWW» и решили посмотреть, каковы нынче тренды…
VVVVVV??? VVVVVV!!! :)