返回语句后的代码,没有警告

Code after return statement without warning

本文关键字:警告 代码 语句 返回      更新时间:2023-10-16

我们刚刚在代码库中发现了一个问题,其中语句位于返回语句之后。

例如

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);
}

我不明白的是,为什么我们的编译器(GCC 4.8.5 和 7(不发出警告?

我们用-std=c++0x -Wall -Wextra -Wsign-compare -Wunknown-pragmas -Wold-style-cast -Wshadow -Wfatal-errors编译

GCC无法发出死代码警告,因为Wunreachable-code标志/功能在 4.4 版之后被删除,您可以在此处阅读。

Clang 版本 4(head 现在是 8 出来了,所以我不建议这样做(,当代码使用[-Wunreachable-code标志编译时,也会发出警告:

警告:代码将永远不会被执行 [-Wunreachable-code]


您可以尝试使用静态分析工具,该列表中有很多。