if-else 块引发"control reaches end of non-void function"警告
if-else Block Raises a "control reaches end of non-void function" Warning
我正在创建一个基于三种几何形状的碰撞检查函数:直线,矩形和圆形。我写了一个Line-Line检查函数,看起来像这样:
bool check_collision(jLine L1, jLine L2, double singular_threshold=1e-6){
/*Variable definitions omitted for brevity*/
if (parallel){
return false;
}
else if (infinite){
return true;
}
else{
jVector t;
t = M.inverse()*(s2 - s1);
double t1 = t.get_x(), t2 = t.get_y();
on1 = (0. <= t1) and (t1 <= 1.);
on2 = (0. <= t2) and (t2 <= 1.);
if (seg1){
if (not on1){
return false;
}
else if (seg2){
if (not on2){
return false;
}
else{
return true;
}
}
}
else{
if (on2){
return true;
}
else{
return false;
}
}
}
}
所有变量和类型都被正确定义,不会引起任何问题。然而,当我编译这段代码时,警告给出了"控制到达非空函数的结束"。这个警告似乎表明我的if-else
树包含一个没有return
语句的分支。然而,据我所知,每个分支都以返回bool
类型对象结束。我错过什么了吗?
当我在函数的最后添加return true;
时,警告被删除了,但我觉得这应该是不必要的。我还假设,只要使用if-else链,就会发出此警告。我用另一个完全由if-elif-else链组成的函数反驳了这一点:
bool check_collision(jRect R1, jRect R2){
if (R2.left() > R1.right()){
return false;
}
else if (R2.right() < R1.left()){
return false;
}
else if (R2.top() > R1.bottom()){
return false;
}
else if (R2.bottom() < R1.top()){
return false;
}
else{
return true;
}
}
编译此函数时不会引发警告。有人能告诉我我漏掉了什么吗?
据我所知,每个分支都以返回bool类型对象结束。我错过什么了吗?
嗯,是的。
if (not on1){
return false;
}
else if (seg2){
if (not on2){
return false;
}
else{
return true;
}
}
在这段代码中,您的if
有else if
,但没有else
。如果else
被"触发",则该函数在遇到return
语句之前将运行完代码。
编译器警告你,你没有写任何代码来处理on1 && !seg2
。如果这个条件不可能,我们不能说,因为我们看不到seg2
;但是,更重要的是,编译器不能说两者。
相关文章:
- 如何处理 c++ 中类实现中的"invalid use of non-static data member"?
- 收到错误"invalid use of non-static data member 'stu::n' "
- "Warning : No return statement in function returning non-void"是什么意思?
- 抑制非平凡无用的警告"control may reach end of non-void function"
- 我在C++年写了一个findClosestPrime(),但Xcode抱怨"Control may reach end of non-void function"
- 收到此警告" Control may reach end of non-void function "
- 即使我已经涵盖了所有情况,也会收到"control reaches end of non-void function"警告
- 布尔函数"Control reaches end of non-void function"错误
- 困惑为什么"control may reach end of non-void function"
- 当调用带有警告"control reaches end of non-void function"的函数时,(实际上)会发生什么?
- "Control may reach end of non-void function"警告
- 为什么'control reaches end of non-void function'只是一个警告?合法吗?
- 错误:在 c++ 中"Control may reach end of non-void function"
- "control reaches end of non-void function",通过枚举类型进行完全处理的案例切换
- 错误:"control may reach end of non-void function"
- c++函数(错误:control may reach end of non - void function)
- "control reaches end of non-void function" Eclipse C++ 中的警告,但没有编译或运行时错误
- 抛出异常并忽略"reaches end of non-void function"警告不好吗?
- if-else 块引发"control reaches end of non-void function"警告
- 看不到"control reaches end of non-void function [-Wreturn-type]"的原因