Подавить никогда не используемые предупреждения для автоматически связанных обработчиков событий в Cppcheck

Я использую Cppcheck 1.70 для проверки проектов C++-Builder. Я получаю много предупреждений о стиле, как это

[source\DbgRecMain.cpp:452]: (style) The function 'FormResize' is never used.

Эти функции являются обработчиками событий, которые используются, но не явно в коде C++: они связаны средой выполнения VCL после загрузки соответствующей формы или модуля данных. Естественно, Cppcheck не проверяет файлы DFM, поэтому он не может обнаружить ссылки между событиями и определенными там обработчиками.

Некоторые варианты, которые приходят мне в голову

  • Добавляем некоторые явные ссылки, но это нужно поддерживать вручную.
  • Подавление всех предупреждений такого рода, но это скрыло бы действительно мертвый код.

Как я могу специально подавить эти предупреждения о явно неиспользуемых обработчиках событий?

1 ответ

Решение

В документации CppCheck есть глава о подавлении предупреждений / ошибок. В частности, глава 6.2 будет вам полезна, так как вы сможете при необходимости подавлять предупреждения об отдельных обработчиках событий:

Глава 6. Подавления

Если вы хотите отфильтровать определенные ошибки, вы можете их устранить.

6.1. Подавление определенного типа ошибки

Вы можете подавить определенные типы ошибок. Формат для такого подавления является одним из:

[error id]:[filename]:[line]
[error id]:[filename2]
[error id]

error id это идентификатор, который вы хотите подавить. Самый простой способ получить это - использовать --xml флаг командной строки. Скопируйте и вставьте id строка из вывода XML. Это может быть * подавить все предупреждения (для указанного файла или файлов).

filename может включать символы подстановки * или же ?, которые соответствуют любой последовательности символов или любому отдельному символу соответственно. Рекомендуется использовать "/" в качестве разделителя пути во всех операционных системах.

6.1.1. Подавление командной строки

--suppress= Параметр командной строки используется для указания подавлений в командной строке. Пример:

cppcheck --suppress=memleak:src/file1.cpp src/

6.1.2. Перечисление подавлений в файле

Вы можете создать файл подавлений. Пример:

// suppress memleak and exceptNew errors in the file src/file1.cpp
memleak:src/file1.cpp
exceptNew:src/file1.cpp

// suppress all uninitvar errors in all files
uninitvar

Обратите внимание, что вы можете добавить пустые строки и комментарии в файл подавлений. Вы можете использовать файл подавлений следующим образом:

cppcheck --suppressions-list=suppressions.txt src/

6.2. Встроенные подавления

Подавления также могут быть добавлены непосредственно в код путем добавления комментариев, содержащих специальные ключевые слова. Прежде чем добавлять такие комментарии, учтите, что читабельность кода немного пожертвована.

Этот код обычно генерирует сообщение об ошибке:

void f() {
    char arr[5];
    arr[10] = 0;
}

Выход:

# cppcheck test.c
Checking test.c...
[test.c:3]: (error) Array ’arr[5]’ index 10 out of bounds

Для подавления сообщения об ошибке можно добавить комментарий:

void f() {
    char arr[5];

    // cppcheck-suppress arrayIndexOutOfBounds
    arr[10] = 0;
}

Теперь --inline-suppr Флаг может быть использован для подавления предупреждения. При вызове cppcheck следующим образом не сообщается об ошибке:

cppcheck --inline-suppr test.c

Также см. Следующие вопросы для более подробной информации:

Как использовать параметр встроенного фильтра подавления cppcheck для кода C++?

Могу ли я включить подавление cppcheck в заголовок функции?

Другие вопросы по тегам