Выпуск 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” обработка файлов разметки откладывается до тех пор, пока не будут обработаны файлы с кодом.
Release. Ссылка here.