Глава 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
Также см. следующие вопросы для более подробной информации: