我无法编译我的代码,我收到错误:控件可能会到达非void函数的末尾
/**
* Returns true if value is in array of n values, else false.
*/
bool search(int value, int values[], int n)
{
//Binary search algorithm
int first = 0;
int last = n-1;
int middle = (first+last)/2;
if (n<1)
return false;
else
{
while (first <= last)
{
if (values[middle]==value)
return true;
else if(values[middle]<value)
first=middle+1;
else if (values[middle]>value)
{
last=middle-1;
}
middle=(first+last)/2;
}
}
if (first>last)
return false;
}
任何人都可以查看我的代码并帮我找出问题所在吗?我很难自己去看!从我的角度来看,这个函数返回true或false
答案 0 :(得分:2)
您的返回类型bool
意味着您的函数总是应该在退出之前返回一个布尔值,无论它执行哪个执行路径。就目前而言,在检查时出现,您可以通过&#34;最后if
并且从未点击过返回语句。要验证否则需要以某种方式单步执行逻辑,编译器无法合理地预期这样做。最后只需改为:
if (first>last) {
return false;
} else {
return true;
}
或者更简洁:
return (first > last) ? false : true;
答案 1 :(得分:1)
在您的代码中,该功能无法脱离结束。
但是,编译器不需要准确诊断函数是否可以结束。一般来说,这样做需要解决暂停问题。
相反,作为一种实际的衡量标准,您的编译器正在进行一些基本的检查和警告,因为它看到if ( first > last ) return false;
,它没有做足够的代码分析来确定永远不会到达此分支,除非{ {1}}。
要取消此警告,您只需删除第first > last
行即可。 BTW这是一个警告,而不是错误;所以它不应该阻止你的编译。