为什么在 C++ 中没有无用条件 returns 的警告?

Why is there no warning for useless conditional returns in C++?

我有以下代码示例:

void some_function()
{
    int ret = do_something();

    if(ret == SOME_ERROR)
        return;
}

Afaik 最后一个 if 作为函数 returns 是无用的,无论 ret 有什么值。我希望编译器发出警告或至少提供信息(我使用 GCC 6)。我还尝试启用来自 this thread 的所有警告,但仍然没有。使用 return 语句返回和在 void 函数末尾返回之间有什么区别,或者它是否得到了优化(但我仍然认为那时警告会有用)?

A void function can perfectly return.

这就是为什么您看不到 error/warning。从我的 来看,即使我使用了一些有用的标志,我也什么也得不到:

Georgioss-MacBook-Pro:~ gsamaras$ g++ -pedantic -Wall -Wextra -Wconversion main.cpp 
Georgioss-MacBook-Pro:~ gsamaras$ 

您想在要终止函数时执行此操作,但根本不需要 return 任何操作。


尝试return 5;,你当然会得到一个错误。

编译器警告应该在误报和漏报之间保持平衡。

警告太多 - 您将花费大量时间浏览它们而没有任何实际改进(或者,更现实地说,您将完全禁用它们)。

很难想象这样的警告会显示代码存在真正的问题,而不仅仅是一个小的风格问题。

考虑,例如,-Wunused。这通常表示您拼错了一些变量名,或者忘记了 this:

float x = ...;
float y = ...;

return atan2(y, y);
//x is never used, probably an error

您的示例可能是对静态分析工具的诊断,但太小而不能用作一般编译器警告。

您编写了完全合法的代码。 所以编译器没有错误。

!如果!您启用优化它将被优化掉。 你可以在这里看到它: https://godbolt.org/g/pUr7eP

也许这会被一些静态分析器标记。