Pull to refresh

Comments 39

Лет 7 назад, в одном проекте проекте видел switch на 17 тысяч строк. С вложенными ветвлениями. Увы, проект очень древний и открытыми исходниками там и не пахло, даже скриншота не осталось.

Вспоминается код одной CRM, где инициализация подчинённых окон проходила с помощью if (название окна = окно1) then initWindow1() else… и так около 100 окон.
Пользователи жаловались на пару минут загрузки при переходах.
Эм… а разве 100 if-ов, не будут обработаны почти мгновенно?
Будут. но тут немного не то: init вызывается для каждого окна и для каждого проходит по всем if в поисках нужного, поэтому — для первого — 1 if, для второго — 2, для сотого — 100 if, которые вызываются по очереди и немного инвалидируют кэш.
Во времена Pentium D это было дорого и печально.
UFO landed and left these words here
Как минимум, это очень неприятно читать и править.
И так логика описана для всех… надцати главных окон.
UFO landed and left these words here
Если дёргать WinAPI функции, чтобы для окон извлекать заголовки, да ещё написать так, что сложность квадратичная — это миллионы отнюдь не быстрых вызовов.
Аххахахах, вот это действительно сильно написано :D
UFO landed and left these words here
Что-то я «Предупреждение 4» (V805) не понял.

Зачем функции, возвращающей число символов _до_ завершающего нуля «пробегать все символы строки»? Увидит первый «0» и остановится. Тут максимум «оптимизация» вызова функции вместо сравнения ИМХО…

Имеется в виду, что если строка не пустая и достаточно длинная, strlen пробежится по ней всей, хотя могла бы остановиться после первого шага.

Так о том и речь, что не бегает она по всей строке — при первом вхождении нуля вываливается. Что в BSD, что в glibc — stackoverflow.com/a/1733294/2320413

А… кажись дошло — если строка не пустая, то получаем лишний цикл вычисления длины… :)
Собс-но, фраза «Если на вход подается большая строка, то каждый её символ всё равно будет сравнён со строковым нулём.» ввела в заблуждение
Если строка непустая, strlen всю её пробегает. Хотя для проверки, что строка непустая, достаточно было посмотреть на первый символ.
Не пробегает там strlen ничего. Можете убедиться.

А читателю понятнее.

P.S. Специально взял компиляторы подревнее, чтобы не было сомнений в том, что это новомодная оптимизация.
У меня MSVC (наверное, как и у разработчиков и клиентов PVS-Studio основной компилятор), и там всё честно пробегает :P

И VVVVV с большой вероятностью собран MSVC.
VVVVVV's official desktop versions are built with the following environments:
Windows: Visual Studio 2010

Я может быть неправильно вас понял, но у меня сложилось впечатление, что у вас "символы до завершающего нуля" и "вся строка" это разные вещи. Нет, это одно и то же. И там нет никакого "первого вхождения нуля" и вообще никаких вхождений нуля. Ноль это спецзначение, обозначающее конец строки, и никаких других концов, до которых можно пробежать, у строки быть не может.
Соответственно, strlen пробегает все символы строки + не-символ-строки '\0' который идёт ПОСЛЕ всех символов строки, а затем останавливается. Байты после нуля уже к строке никакого отношения не имеют, даже если под них выделена память в массиве char, в котором эта строка хранится.

Напомнило. Первый раз, когда я писал процедуру сортировки для 4 элементов, я использовал тоьлко if'ы, и код получился аж на 150 строк. Меня извиняет только то, что в тот момент мне было только 9 лет.

Я тоже лет в 11 изобрел сортировку, много позже я узнал что у нее даже есть имя — сортировка пузырьком :)

Terry Cavanagh прямо написал, что там bullshit на bullshit-е.
Не каждый программист (даже в замкнутой компании, среди коллег) осмелится показать всему миру (или своим коллегам) свой текущий код. Не тот, что для этого тщательно вылизан и причёсан. А тупо "прямо щазз", "в честь юбилея". (но при этом таки работает!)

UFO landed and left these words here
UFO landed and left these words here
В этом списке явно не хватает PVS-Studio!
image
Codacy вообще бесполезен (самый кривой в этом списке).
У Coverity очень ужасный WEB-интерфейс.
LGTM игнорит windows проекты.
Кстати, Coverity заинтегрировался с Travis-CI. Было бы здорово, что бы PVS-Studio заинтегрировался с AppVeyor (что бы свою сборочную систему не городить).
Да даже и без интеграции с AppVeyor можно обойтись.
Как юзать CoverityScan совместно с AppVeyor
К примеру, на сервере AppVeyor уже лежит дистр CoverityScan, который нужно перед сборкой скачать. После выполнения cov-build результаты кладуться в архив и через WEB-форму заливаются на сервер Coverity. Там результаты прогоняются через cov-analyzer и на персональной страничке проекта появляются результаты (эта страничка ужасна).
Это всего лишь картинки, которые можно сгенерировать.

На главной странице документации приведены способы интеграции своего проекта с разными CI:

Некомерческим открытым проектам можно использовать PVS-Studio бесплатно. Где-то в блоге у нас есть полное описание условий.
UFO landed and left these words here
Например, здесь shields.io. Там есть кнопка Your Badge. Это один из многих проектов для генерации бейджей.
UFO landed and left these words here
Хм. Странно, что вы только про генерацию бэйджика ответили.
А вот как удобный и понятный WEB-интерфейс с результатами сгенерировать? Вот в чём вопрос.
У Coverity очень ужасный WEB-интерфейс.
По отзывам у них много проблем, в том числе с анализом.

PVS-Studio используют в связке с SonarQube. Мы очень давно сделали плагин для него. Это очень популярное и удобное решение среди клиентов наших клиентов.
Перекрытие имён – это достаточно грубая ошибка, которую бывает весьма тяжело отыскать самостоятельно в ходе обзора кода.

Увы, обычно это ошибкой не считают. А так, всегда всё компилю с -Wshadow -Werror и такие места сразу отсеиваются.

Еще можно Resharper юзать, там показывает ошибку во время написания кода.

Насколько я знаю, ReSharper только для .NET, в статье речь про С++ :)
Для плюсов же очень круто работает clang и магия от той же JetBrains, в паре они ругаются на всё от неверно передаваемых значений (по их мнению) до названия переменных и кодстайла.

ReSharper уже давно и для C++ есть. Не помню точно с какой версии, но 5 лет назад он уже точно C++ поддерживал.
Если вы читаете этот текст – значит, вы либо подумали, что с заголовком статьи что-то не то, либо увидели в нём название знакомой компьютерной игры.
… либо подумали, что статья про «домен с WWW vs домен без WWW» и решили посмотреть, каковы нынче тренды…
Sign up to leave a comment.