Pull to refresh
587
103
Андрей Карпов @Andrey2008

Директор по маркетингу

Send message

Вот мне делать больше нечего :) Наверняка найдутся какие-то компиляторы без такой диагностики. Например для embedded или просто старые, но ещё где-то используемые. Но речь про общий тренд. Компиляторы и анализаторы вытравили такие баги из кода в целом :)

Ну на самом деле такие ошибки обычно не при сравнении с true/false, а с -1 и т.п. True/false это просто особенно ярко и красиво :)

Да, но нет :). Если хочется сделать хорошо, нужно учитывать разные паттерны и тонкости. В PVS-Studio в диагностике V559 есть с десяток исключений, когда ругаться не надо, что-бы не раздражать программистов. Например, всё хорошо, если написано:

while(*to++ = *from++)

В целом я согласен, что специализированные самописные классы могут быть эффективнее их стандартных аналогов. Однако, не надо быть прям категоричным в этом. Есть смысл оптимизировать узкие места по необходимости, а не сразу писать всё своё :). Во-первых, своё может получиться куда менее надёжным. Во-вторых, эффективность многих встроенных классов значительно выросла, и они куда эффективнее, чем 10-20 лет назад. См. личную историю на тему std::string здесь (Вредный совет N50. Не верь в эффективность std::string).

Не весь код можно не трогать. Статья о том, что статический анализ помогает начать рефакторинг. Анализатор даёт и повод и отправную точку для этого. А старый код он вот такой, да... У меня нет иллюзий на тему того, какой код скрывают недра реальных проектов :)

Почему?

В этом классе есть виртуальные функции. Следовательно, предполагается, что от этого класса будут наследоваться другие классы. А раз так, то и деструктор следует объявить как виртуальный.

Я стараюсь учить в статьях хорошему :)

Реальный код реального проекта :). Это только в книгах всё идеально :)

Образ разработчика, проектирующего программу рациональным безошибочным способом на основе ясно сформулированных требований, совершенно нереалистичен. Никакая система так никогда не разрабатывалась и, наверное, не будет разрабатываться. Даже примеры разработки небольших программ, встречающихся в учебниках, нереалистичны. Авторы перепроверяют и улучшают их до тех пор, пока не продемонстрируют нам то, что они хотели бы получить, а не то, что получилось на самом деле.

Дэвид Парнас и Пол Клементс (David Parnas and Paul Clements)

Актуален код или нет, особенного значения не имеет :). Главное, он исторически интересен, даёт возможность поговорить про статический анализ и рефакторинг (про это будет в следующих частях). За идеи по проверке спасибо, передам коллегам подумать.

Тогда можно убрать static. Всё равно ведь есть интерфейс её дёргать из вне.

Ловите ленивого! :)

P.S. Системы разные бывают. Настройки систем бывают разные. Код может заимствоваться в другие приложения для других систем.

P.P.S. Впрочем, продолжайте. Больше подобного кода, больше спрос на статические анализаторы кода :) Спасибо.

Хотел написать комментарий, что я не призываю обязательно как-то сложно обрабатывать нехватку памяти. Суть в том, что она в принципе должна быть, чтобы хотя-бы корректно завершить работу программы. Начал писать, но в процессе превратил его в мини-пост: Притча о нулевом указателе для ленивых C программистов.

«Есть всего два типа языков программирования: те, на которые люди всё время ругаются, и те, которые никто не использует» Bjarne Stroustrup
:)

1
23 ...

Information

Rating
44-th
Works in
Date of birth
Registered
Activity

Specialization

Specialist
C++
C
Software development