我有以下代码示例:
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
也许这会被一些静态分析器标记。