控制可以达到非空函数C的结束

时间:2014-04-09 22:49:58

标签: c function void

我无法编译我的代码,我收到错误:控件可能会到达非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

2 个答案:

答案 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这是一个警告,而不是错误;所以它不应该阻止你的编译。