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;
}
}
}
}
所有变量和类型都已正确定义,不会造成任何问题。但是,当我编译这段代码时,会发出 "control reaches end of non-void function" 的警告。此警告似乎表明我的 if-else
树包含一个没有 return
语句的分支。但是,据我所知,每个分支都以 bool
类型对象的 return 结束。我错过了什么吗?
当我在函数的最后添加一个 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;
}
}
编译此函数时不会引发警告。任何人都可以阐明我所缺少的东西吗?任何帮助将不胜感激。
As far as I can tell, every branch ends in the return of a bool type object. Am I missing something?
嗯,是的。
if (not on1){
return false;
}
else if (seg2){
if (not on2){
return false;
}
else{
return true;
}
}
在这部分代码中,您的 if
有一个 else if
但没有 else
。如果 else
是 "triggered",则该函数会在遇到 return
语句之前用完代码。
编译器警告您您没有编写任何代码来处理 on1 && !seg2
时的情况。如果这个条件不可能,我们不能说,因为我们看不到seg2
;但是,更重要的是,编译器也不能说。
我正在创建一个基于以下几何形状的碰撞检查函数:直线、矩形和圆形。我写了一个 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;
}
}
}
}
所有变量和类型都已正确定义,不会造成任何问题。但是,当我编译这段代码时,会发出 "control reaches end of non-void function" 的警告。此警告似乎表明我的 if-else
树包含一个没有 return
语句的分支。但是,据我所知,每个分支都以 bool
类型对象的 return 结束。我错过了什么吗?
当我在函数的最后添加一个 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;
}
}
编译此函数时不会引发警告。任何人都可以阐明我所缺少的东西吗?任何帮助将不胜感激。
As far as I can tell, every branch ends in the return of a bool type object. Am I missing something?
嗯,是的。
if (not on1){
return false;
}
else if (seg2){
if (not on2){
return false;
}
else{
return true;
}
}
在这部分代码中,您的 if
有一个 else if
但没有 else
。如果 else
是 "triggered",则该函数会在遇到 return
语句之前用完代码。
编译器警告您您没有编写任何代码来处理 on1 && !seg2
时的情况。如果这个条件不可能,我们不能说,因为我们看不到seg2
;但是,更重要的是,编译器也不能说。