2015-06-29 3 views
4

Я добавил встроенный комментарий, чтобы подавить предупреждение cppcheck unusedFunction для функции, но я хотел бы включить это в заголовок функции, чтобы Doxygen мог документировать все неиспользуемые функции (я реализую API, поэтому у меня много функции, которые не будут использоваться в моем источнике). Я бы предпочел не подавлять все ошибки unusedFunction, а скорее на основе каждой функции.Могу ли я включить подавление cppcheck внутри заголовка функции?

Я хотел бы сделать что-то вроде этого:

/** 
* 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 documentation, по-видимому, подразумевает, что подавление должно быть непосредственно перед созданием строки, а затем ошибкой.

У кого-нибудь был успех?

ответ

2

Взгляд на cppcheck источники (файл preprocessor.cpp function 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/

+0

Я рассмотрю это, спасибо @manlio! – nabingham

Смежные вопросы