Подтвердить что ты не робот

Есть ли список сообщений Cppcheck?

Ранее наша команда использовала Lint в качестве статического анализатора кода, но он стал слишком загроможденным и имел слишком много шума.

Мы используем С++ 03 с частым использованием Boost, и Lint, похоже, не нравится Boost (я слышал, что это стало лучше в более поздних версиях). Я начал смотреть на другие статические анализаторы кода, наткнулся на Cppcheck и опробовал его. Я очень впечатлен тем, о чем он предупреждает (я видел около десятка информационных проблем и проблем со стилем).

Меня интересует следующее: есть ли список всех сообщений Cppcheck, которые выдает Cppcheck, подобно тому, как Lint и PVS-Studio имеют список своих сообщений? Официальный сайт Cppcheck перечисляет:

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

Но меня больше интересует нечто похожее на Lint и PVS-Studio, и похожее на то, как результаты отображаются в Visual Studio:

ID | Category/Severity | Text
4b9b3361

Ответ 1

Список проверок Cppcheck доступен в вики проекта, и, как указано там, вы также можете получить список из командной строки, выполнив:

$ cppcheck --doc

или же

$ cppcheck --errorlist

Список ошибок выводит файл XML со всеми тремя вещами, которые вы хотите. Вот небольшой пример из этого:

<error id="unnecessaryForwardDeclaration" severity="style" msg="The variable &apos;name&apos; forward declaration is unnecessary. Type variable is already declared earlier."/>
<error id="variableHidingEnum" severity="style" msg="variable &apos;name&apos; hides enumerator with same name"/>
<error id="unnecessaryQualification" severity="style" msg="The extra qualification &apos;type&apos; is unnecessary and is considered an error by many compilers."/>