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