return 语句后的代码无警告
Code after return statement without warning
我们刚刚在我们的代码库中发现了一个问题,其中一条语句位于 return 语句之后。
例如
std::string MyClass::addElement(Type1 &item, const std::string ¶m2)
{
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
flag/feature 在 4.4 版后被删除,您可以阅读 here.
Clang version 4 (head is 8 out now, so I don't suggest it), 当使用 [-Wunreachable-code
标志编译代码时,也会发出警告:
warning: code will never be executed [-Wunreachable-code]
你可以试试静态分析工具,里面有很多list。
我们刚刚在我们的代码库中发现了一个问题,其中一条语句位于 return 语句之后。
例如
std::string MyClass::addElement(Type1 &item, const std::string ¶m2)
{
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
flag/feature 在 4.4 版后被删除,您可以阅读 here.
Clang version 4 (head is 8 out now, so I don't suggest it), 当使用 [-Wunreachable-code
标志编译代码时,也会发出警告:
warning: code will never be executed [-Wunreachable-code]
你可以试试静态分析工具,里面有很多list。