Выпуск cppcheck 2.12, статического анализатора кода для языков C++ и С

Вышла новая версия статического анализатора кода cppcheck 2.12, позволяющего выявлять различные классы ошибок в коде на языках Си и Си++, в том числе при использовании нестандартного синтаксиса, типичного для встраиваемых систем. Предоставляется коллекция плагинов, через которые обеспечена интеграция cppcheck с различными системами разработки, непрерывной интеграции и тестирования, а также предоставлены такие возможности как проверка соответствия кода стилю оформления кода. Для разбора кода может применяться как собственный парсер, так и внешний парсер
от Clang. В состав также входит скрипт donate-cpu.py для предоставления локальных ресурсов для выполнения работы по совместной проверке кода пакетов Debian. Исходные тексты проекта распространяются
под лицензией GPLv3.

Развитие cppcheck сосредоточено на выявлении проблем, связанных с неопределённым поведением и применением конструкций, опасных с точки зрения безопасности. Целью также является минимизация ложных срабатываний. Среди
выявляемых проблем: указатели на несуществующие объекты, деления на ноль, целочисленные переполнения, некорректные операции битового сдвига, некорректные преобразования, проблемы
при работе с памятью, некорректное использование STL, разыменование нулевых указателей, применение проверок после фактического обращения к буферу, выход за границы буферов, использование неинициализированных переменных.

Основные изменения:

  • Добавлена проверка «uselessOverride» обнаруживающая бесполезные переопределения функций, которые дублируют код или вызывают реализацию базового класса;
  • Добавлена проверка «knownPointerToBool» — преобразование указателя в переменную булевского типа, результатом которой всегда является истинное или ложное значение.
  • Улучшенные проверки:
    • В проверки «truncLongCastAssignment» и «truncLongCastReturn» добавлен контроль дополнительных типов, включая float и double;
    • Проверка «duplInheritedMember» теперь дополнительно сообщает о дубликатных функциях-членах;
    • Проверки «constParameter*»/»constVariable*» обнаруживают больше случаев, когда указатели/ссылки могут иметь модификатор const, например при вызове библиотечных функций.
  • Графический интерфейс:
    • В статистике формируются сведения о том, какие проверки были включены в последнем анализе;
    • Реализовано выделение критических ошибок, из-за которых могли быть пропущены проверки.
  • Изменения в интерфейсе:
    • Добавлена выдача количества проверок, сработавших с запуска;
    • Добавлен параметр командной строки ‘—checkers-report’ который управляет формированием в файле протокола сведений о том, какие проверки сработали, а какие были отключены.
  • Объявлено устаревшим:
    • Система сборки qmake объявлена устаревшей и будет удалена в будущей версии;
    • Параметр командной строки ‘—template ‘ объявлен устаревшим и будет удалён в версии 2.13, используйте ‘—template=’;
    • Параметр командной строки ‘—template-location ‘ объявлен устаревшим и будет удалён в версии 2.13, используйте ‘—template-location=’;
  • Другое:
    • Параметр сборки «USE_QT6=On» больше автоматически не переключается на Qt5, если Qt6 не найдена;
    • Если аварийное завершение дополнения сопровождалось кодом завершения, то теперь будет приводить к «internalError», а не будет проигнорировано;
    • Конфигурация «Win32» была удалена из проектов и решений Visual Studio. Cборку исполняемых файлов для 32-х битной архитектуры по-прежнему можно выполнить при помощи CMake, но такой способ не тестируется и не сопровождается.

Источник: http://www.opennet.ru/opennews/art.shtml?num=59764