Могу ли я включить подавление cppcheck в заголовок функции?
Я добавил встроенный комментарий, чтобы подавить предупреждение о неиспользованной функции cppcheck для функции, но я хотел бы включить это в заголовок функции, чтобы Doxygen мог документировать все неиспользуемые функции (я реализую API, поэтому у меня есть много функций, которые не будет использоваться в моем источнике). Я предпочел бы не подавлять все неиспользуемые ошибки функций, а скорее для каждой функции.
Я хотел бы сделать что-то вроде этого:
/**
* API function description
*
* @param p1 function pointer to the ...
* @return 0 if successful, -1 otherwise.
* // cppcheck-suppress unusedFunction
*/
int CreateTask(Task_FuncPtr p1)
{
return doSomething();
}
Но когда я делаю это, cppcheck не "видит" встроенное подавление. Если я перемещу его за пределы заголовка, но непосредственно перед объявлением функции, то подавление работает. Документация cppcheck, кажется, подразумевает, что подавление должно быть непосредственно перед тем, как строка генерирует ошибку.
Кто-нибудь имел успех с этим?
1 ответ
Взглянув на cppcheck
источники (файл preprocessor.cpp
функция RemoveComments()
Кажется, вы не можете этого сделать.
Код для идентификации комментариев:
if (str.compare(i, 2, "//") == 0) { /* ... */ }
а также
else if (str.compare(i, 2, "/*") == 0) { /* ... */ }
Когда комментарий найден, код, который управляет подавлением предупреждений:
if (_settings && _settings->_inlineSuppressions) {
std::istringstream iss(comment);
std::string word;
iss >> word;
if (word == "cppcheck-suppress") {
iss >> word;
if (iss)
suppressionIDs.push_back(word);
}
}
Так cppcheck
пропустит пробелы и проверит первый токен сразу после //
или же /*
,
К сожалению, специальные блоки комментариев Doxygen начинаются с /**
, ///
, /*!
или же //!
и третий символ препятствует "правильному совпадению".
Изменение:
if (word == "cppcheck-suppress") { /* ... */ }
в:
if (contains(word, "cppcheck-suppress")) { /* ... */ }
// or if (ends_with(word, "cppcheck-suppress"))
следует разрешить то, что вы хотите:
/**
* API function description
*
* @param p1 function pointer to the ...
* @return 0 if successful, -1 otherwise.
*/
/** cppcheck-suppress unusedFunction */
или же
/// API function description
///
/// @param p1 function pointer to the ...
/// @return 0 if successful, -1 otherwise.
///
/// cppcheck-suppress unusedFunction
Вы можете, вероятно, открыть билет на http://trac.cppcheck.net/