22.04.2024

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

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

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

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

  • Добавлена проверка pop_back() для пустых контейнеров;
  • Улучшены контроли в циклах для алгоритмов библиотеки STL any_of, all_of и none_of.
  • Улучшения анализатора потока управления:
    • Возвращаемое значение функции теперь может быть определено даже при использовании условий;
    • Переопределение размеров контейнеров возвращаемых из функции;
    • Выведение возможных значений на основании их возможных символических значений;
    • Улучшение после помещения значения в контейнер.
  • Графический интерфейс:
    • В файлах .cppcheck объявлена устаревшей и будет удалена в версии 2.14 поддержка типа платформы «Unspecified». Вместо неё необходимо использовать «unspecified’;
    • В диалоговом окне выбора файлов проекта убрана замена относительных путей на абсолютные.
  • Интерфейс командной строки:
    • Добавлена новая опция «—check-level», определяющая уровень детализации проверок. По умолчанию задано значение «normal». Для расширенных проверок можно установить значение «exhaustive»;
    • Для получения детальных сообщений «missingInclude» и «missingIncludeSystem» нет необходимости отдельного запуска с параметром —check-config. Теперь они выдаются при включении «missingInclude» при обычном вызове;
    • Сообщения «missingInclude» и «missingIncludeSystem» выдаются при задание параметра -j со значением большим 1 для сборок отличных от Windows;
    • Для сообщений «missingInclude» и «missingIncludeSystem» теперь применяется параметр «—error-exitcode»;
    • Задание параметра «—enable=information» не будет включать «missingInclude» с версии 2.16, необходимо явное задание;
    • Каждая из проверок constParameter и constVariable была разделены на 3 идентификатора в зависимости от того, является ли параметр или переменная указателем, ссылкой или локальной, что позволит более точно задавать подавление некоторых типов сообщений;
    • Усилен контроль задаваемых значений для некоторых параметров командной строки, требующих задания целочисленных значений;
    • При сканировании проекта с заданием параметра «-j1» обработка файлов разметки откладывается до тех пор, пока не будут обработаны файлы с кодом.

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