Вышла новая версия cppcheck — статического анализатора исходного кода для языков C и C++.
В этом выпуске представлены новые проверки:
- пропущенный
return
в функции; - запись перекрывающихся (overlapping) данных, обнаружение UB;
- сравнение с значением вне допустимого диапазона типов;
- отключение copy elision из-за использования
return std::move(local)
; - открытие файла на чтение и запись в разных потоках (streams).
Также внесены улучшения:
- Добавлен цветной вывод диагностических сообщений на Unix-based платформах.
- Добавлен символьный анализ для ValueFlow.
- Правила, использующие список токенов «define», могут быть сопоставлены и с
#include
. - Библиотечный тег
function
может использовать тегcontainer
, что позволяет задатьyields
илиspecify
для контейнера, принимаемого входным аргументом свободной функции (например,std::size
,std::empty
,std::begin
,std::end
, и т.д). - Библиотечный тег
smart-pointer
может задавать тегunique
для умных указателей, реализующих единоличное владение. Реализовано предупреждение о провисших ссылках на такие указатели. - Исправлены проблемы при использовании флага
--cppcheck-build-dir
. - htmlreport теперь может выводить информацию об авторе (получаемую с помощью
git blame
). - Больше предупреждений о не-константных переменных, которые можно сделать константными.
Помимо этого, была завершена проверка соответствия исходного кода стандарту MISRA C 2012: реализованы все правила MISRA C 2012, кроме 1.1, 1.2 (должны обеспечиваться компилятором) и 17.3 (может обеспечиваться компилятором), включая правила в поправках 1 и 2.
Исходный код анализатора распространяется по лицензии GPLv3.
>>> Подробности