Могу ли я включить подавление 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/

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