Как я могу указать cppCheck НЕ рассматривать функцию как функцию распределения?

У меня есть кодовая база, использующая Qt, на которой я хочу запустить cppCheck, и я хотел бы, чтобы она работала достаточно чисто (подавляла или исправляла большинство ошибок).

У меня есть эта функция addResultLable:

QLabel * TestScreen::addResultLabel(const QString& labelText, int x, int y)
{
    QLabel *pLabel = new QLabel(baseFrame);
    pLabel->setText(labelText);
    pLabel->setGeometry(x, y, TEST_RESULT_WIDTH, TEST_RESULT_HEIGHT);
    pLabel->setAlignment(Qt::AlignCenter);
    return pLabel;
}

И я называю это так: addResultLabel("Пакеты", TEST_RESULT_OFFSET, nextY); следующийY += TEST_RESULT_HEIGHT; m_packets = addResultLabel("0", TEST_RESULT_OFFSET, nextY);

cppCheck выдает (error) Return value of allocation function addResultLabel is not stored. при первом вызове.

Хотя это правда, это не имеет значения: QLabel правильно связан со своим родителем в вызове new QLabel(baseFrame), поэтому на самом деле не имеет значения, сохраняет ли его вызывающий addResultLabel или нет. Этих вызовов несколько, и я не хочу подавлять их в каждом месте вызова.

Что я хотел бы сделать, так это сообщить cppCheck, что addResultLabel на самом деле НЕ является функцией распределения, чтобы она перестала проверять своих вызывающих.

Я просмотрел руководство, и хотя я вижу, как ДОБАВИТЬ новую функцию распределения, я не вижу, как указать cppCheck НЕ рассматривать функцию как функцию распределения.


person Michael Kohne    schedule 12.06.2015    source источник
comment
Если вы никогда не сохраняете возвращаемое значение, просто измените его на void TestScreen::addResultLabel(...). Конечно, это не работает, если вы используете возвращаемое значение несколько раз, но не всегда...   -  person twalberg    schedule 17.06.2015
comment
@twalberg - да, к сожалению, мы иногда его используем, так что это не вариант для нас.   -  person Michael Kohne    schedule 18.06.2015


Ответы (1)


Я разработчик Cppcheck.

Это ложное срабатывание. Это должно быть исправлено в Cppcheck.

Я создал тикет об этом в системе отслеживания проблем Cppcheck: http://trac.cppcheck.net/ticket/6775

person Daniel Marjamäki    schedule 17.06.2015
comment
Есть новости об этом? Кажется, что даже его подавление из командной строки с помощью --suppress= течьReturnValNotUsed не работает, потому что исполняемый файл возвращается с ошибкой, которая приводит к сбою наших автоматических сборок. - person Alf; 18.05.2016
comment
Извините, нет прогресса. Однако в настоящее время есть небольшая награда за исправление этого. У нас есть награда за старые неисправленные дефекты. - person Daniel Marjamäki; 19.05.2016
comment
Если он подавлен, код выхода должен быть равен 0. Используете ли вы --exitcode-suppressions? - person Daniel Marjamäki; 19.05.2016
comment
Нет, не знаю. Вот полная строка: cppcheck --enable=warning --enable=portability --enable=style --enable=performance --suppress=leakReturnValNotUsed --error-exitcode=253 --inline-suppr --std=c+ +11 -j8 --xml Источник 2› cppcheck.xml - person Alf; 20.05.2016
comment
тогда код выхода должен быть равен 0. значит есть баг. однако я не могу воспроизвести для меня код выхода 0, если он подавлен. Я использую 64-битный дебиан. Интересно, можете ли вы попытаться скомпилировать cppcheck и отладить это. пожалуйста, зайдите на IRC-канал cppcheck, если вы хотите поговорить об этом, URL-адрес webchat.freenode.net и канал это #cppcheck . - person Daniel Marjamäki; 22.05.2016
comment
После некоторых дополнительных исследований выяснилось, что я получаю код выхода 0, когда запускаю ту же команду без -j 8, поэтому ошибка связана с многопоточностью. - person Alf; 08.06.2016
comment
Можете ли вы воспроизвести это с помощью последней версии cppcheck (выпущенной несколько дней назад)? Похоже, это связано с trac.cppcheck.net/ticket/5746. - person Daniel Marjamäki; 09.06.2016