Код после возврата заявления без предупреждения - PullRequest
0 голосов
/ 23 октября 2018

Мы только что обнаружили проблему в нашей кодовой базе, где оператор находится после оператора возврата.

Например,

std::string MyClass::addElement(Type1 &item, const std::string &param2)
{
    if (param2.empty())
    {
        // logging
        return "";
    }

    return m_database->addElement(item, param2, item.status, true);

    // here I would expect an unreachable code warning
    m_database->updateTableA(item.p1, item.p2, item.p3, AType::AType23);
}

Что я не понимаю, почему наш компилятор (GCC4.8.5 и 7) не выдает предупреждение?

Скомпилируем с -std=c++0x -Wall -Wextra -Wsign-compare -Wunknown-pragmas -Wold-style-cast -Wshadow -Wfatal-errors

1 Ответ

0 голосов
/ 23 октября 2018

GCC не может выдать предупреждение о неработающем коде, поскольку флаг / функция Wunreachable-code удаляется после версии 4.4, поскольку вы можете прочитать здесь .

Clang версии 4 (голова 8 сейчас, поэтому я не предлагаю) также выдаст предупреждение, когда код скомпилирован с флагом [-Wunreachable-code:

предупреждение: код будетникогда не будет выполнен [-Wunreachable-code]


Вы можете попробовать инструмент статического анализа, их много в этом списке .

...