为什么C++中没有无用的条件回报警告

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

本文关键字:条件 回报 警告 无用 C++ 为什么      更新时间:2023-10-16

我有以下代码示例:

void some_function()
{
    int ret = do_something();
    if(ret == SOME_ERROR)
        return;
}

Afaik 最后一个if是无用的,因为无论函数具有什么值,ret都会返回。我希望编译器会收到警告或至少提供信息(我使用 GCC 6(。我还尝试启用来自此线程的所有警告,但仍然没有任何警告。使用 return 语句返回和在 void 函数结束时返回之间有什么区别,或者它是否得到了优化(但我仍然认为警告会很有用(?

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

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

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

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

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

您的示例可以作为静态分析工具的诊断,但太小而无法用作常规编译器警告。

空函数可以完美地返回。

这就是为什么您看不到任何错误/警告的原因。从我的回答来看,即使我使用一些有用的标志,我也不会得到任何东西:

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

当您想要终止函数时,您希望执行此操作,但根本不需要返回任何内容。


当然,尝试执行return 5;,您会收到错误。

你已经编写了完全合法的代码。因此,编译器没有错误。

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

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